- Resumen de los intentos realizados para generar rápidamente una DB de prueba de gran tamaño
→ el mejor resultado actual es 100 millones en 33 segundos (en una MBP 2019)
- Bucle con código Python: 15 minutos para 10 millones
→ ajustando el tamaño de inserción por lotes a 100 mil: reducido a 10 minutos
- Optimización de la configuración de SQLite: desactivar
journal_mode/synchrounous, ajustar el tamaño de caché, bloqueo exclusivo
→ versión con bucle: 100 millones en 10 minutos, versión por lotes: 100 millones en 8.5 minutos
-
Cambio a PyPy: la versión por lotes se redujo a 2.5 minutos para 100 millones (3.5 veces más rápido)
-
Escrito en Rust: versión con bucle + optimización de SQLite, 100 millones en 3 minutos
→ al cambiar a Prepared Statement e insertar en lotes de 50 filas, 100 millones en 34.3 segundos
→ cambio a versión con hilos: 1 hilo Writer, 4 hilos de datos. 32.37 segundos
- Al cambiar el almacenamiento de la DB de SQLite a
:memory:, se redujo 2 segundos y quedó en 29 segundos
→ parece que vaciar 100 millones de rows toma 2 segundos
- Cosas para intentar después (para lograr 1.000 millones por minuto)
→ hacer profiling
→ probar una versión multiproceso para aprovechar 4 núcleos
→ escribirlo en Go y ejecutarlo con el GC desactivado
→ idea loca: aprender el formato de archivo de SQLite y generarlo directamente según ese formato
Aún no hay comentarios.