- Resumo das tentativas feitas para gerar rapidamente um DB de teste de grande porte
→ o melhor resultado atual é 100 milhões em 33 segundos (com base em um MBP 2019)
- Loop com código Python: 10 milhões em 15 minutos
→ ajustando o tamanho do batch insert para 100 mil: reduzido para 10 minutos
- Otimização das configurações do SQLite: desativar
journal_mode/synchrounous, ajustar o tamanho do cache, exclusive lock
→ versão com loop: 100 milhões em 10 minutos, versão em batch: 100 milhões em 8,5 minutos
-
Mudança para PyPy: versão em batch reduzida para 100 milhões em 2,5 minutos (3,5x)
-
Reescrito em Rust: versão com loop + otimizações do SQLite, 100 milhões em 3 minutos
→ ao mudar para Prepared Statement e fazer batch insert de 50 linhas por vez, 100 milhões em 34,3 segundos
→ mudando para a versão com threads: 1 thread de escrita, 4 threads de dados. 32,37 segundos
- Ao mudar o armazenamento do DB SQLite para
:memory:, ganhou mais 2 segundos e ficou em 29 segundos
→ parece que leva 2 segundos para fazer flush de 100 milhões de rows
- Próximas tentativas (para chegar a 1 bilhão em 1 minuto)
→ fazer profiling
→ testar uma versão multiprocessos para usar 4 cores
→ escrever em Go e executar com o GC desativado
→ ideia maluca: aprender o formato de arquivo do SQLite e gerar diretamente nesse formato
Ainda não há comentários.