- Büyük boyutlu bir test veritabanını hızlıca oluşturmak için denenen yöntemlerin özeti
→ Şu anki en iyi seviye: 100 milyon kayıt için 33 saniye (2019 MBP baz alınarak)
- Python koduyla döngü: 10 milyon kayıt için 15 dakika
→ Batch insert boyutunu 100 bine ayarlayınca: 10 dakikaya indi
- SQLite ayar optimizasyonu:
journal_mode/synchrounouskapatma, cache boyutu ayarı, exclusive lock
→ Döngü sürümü 100 milyon kayıt için 10 dakika, batch sürümü 100 milyon kayıt için 8,5 dakika
-
PyPy’a geçiş: batch sürümü 100 milyon kayıtta 2,5 dakikaya indi (3,5x)
-
Rust ile yazım: döngü sürümü + SQLite optimizasyonuyla 100 milyon kayıtta 3 dakika
→ Prepared Statement’a geçip her seferinde 50 satırlık batch insert yapılınca, 100 milyon kayıtta 34,3 saniye
→ Thread sürümüne geçiş: 1 Writer thread, 4 veri thread’i. 32,37 saniye
- SQLite DB depolamasını
:memory:olarak değiştirince 2 saniye daha kısalıp 29 saniye oldu
→ 100 milyon satırı flush etmenin 2 saniye sürdüğü anlaşılıyor
- Sırada denenebilecekler (dakikada 1 milyar hedefi için)
→ Profiling yapmak
→ 4 çekirdeği kullanmak için multiprocess sürüm denemek
→ Go ile yazıp GC’yi kapatarak çalıştırmak
→ Çılgın fikir: SQLite dosya formatını öğrenip doğrudan formata uygun üretmek
Henüz yorum yok.