- Merangkum berbagai upaya yang dicoba untuk membuat DB pengujian berukuran besar dengan cepat
→ Saat ini hasil terbaik berada di level 100 juta data dalam 33 detik (berdasarkan MBP 2019)
- Loop dengan kode Python: 15 menit untuk 10 juta data
→ Mengatur ukuran batch insert menjadi 100 ribu: dipangkas menjadi 10 menit
- Optimasi pengaturan SQLite: mematikan
journal_mode/synchrounous, menyesuaikan ukuran cache, exclusive lock
→ Versi loop 100 juta data dalam 10 menit, versi batch 100 juta data dalam 8,5 menit
-
Beralih ke PyPy: versi batch dipangkas menjadi 2,5 menit untuk 100 juta data (3,5x lebih cepat)
-
Ditulis dengan Rust: versi loop + optimasi SQLite menghasilkan 100 juta data dalam 3 menit
→ Setelah diubah ke Prepared Statement dan batch insert 50 baris sekaligus, 100 juta data dalam 34,3 detik
→ Diubah ke versi thread: 1 thread writer, 4 thread data. 32,37 detik
- Saat penyimpanan DB SQLite diubah ke
:memory:, berkurang 2 detik menjadi 29 detik
→ Tampaknya butuh 2 detik untuk flush 100 juta row
- Hal-hal berikutnya yang akan dicoba (untuk mencapai 1 miliar data per menit)
→ Mencoba profiling
→ Mencoba versi multiprocess untuk memanfaatkan 4 core
→ Menulis dengan bahasa Go lalu menjalankannya dengan GC dimatikan
→ Ide gila: mempelajari format file SQLite lalu membuatnya langsung sesuai format
Belum ada komentar.