10 points par xguru 2021-07-19 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Récapitulatif des essais menés pour générer rapidement une base de test de grande taille

→ Le meilleur résultat actuel est de 33 secondes pour 100 millions de lignes (sur un MBP 2019)

  • Boucle en code Python : 15 minutes pour 10 millions

→ En ajustant la taille des insertions par lot à 100 000 : réduit à 10 minutes

  • Optimisation des réglages SQLite : désactivation de journal_mode/synchronous, ajustement de la taille du cache, verrouillage exclusif

→ Version en boucle : 10 minutes pour 100 millions, version par lots : 8,5 minutes pour 100 millions

  • Passage à PyPy : la version par lots descend à 2,5 minutes pour 100 millions (3,5x plus rapide)

  • Réécriture en Rust : version en boucle + optimisations SQLite, 3 minutes pour 100 millions

→ Après passage aux prepared statements et à des insertions par lots de 50 lignes, 34,3 secondes pour 100 millions

→ Passage à une version multithread : 1 thread d’écriture, 4 threads de données. 32,37 secondes

  • En passant le stockage de la base SQLite à :memory:, gain de 2 secondes, soit 29 secondes

→ Il semble que le flush de 100 millions de lignes prenne 2 secondes

  • Prochaines pistes à tester (pour atteindre 1 milliard par minute)

→ Faire du profiling

→ Tester une version multiprocess pour exploiter 4 cœurs

→ Écrire une version en Go puis l’exécuter avec le GC désactivé

→ Idée folle : apprendre le format de fichier SQLite et générer directement les données dans ce format

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.