10 ポイント 投稿者 xguru 2021-07-19 | まだコメントはありません。 | WhatsAppで共有
  • 大規模なテストDBを高速に生成するために試した工夫を整理

→ 現時点での最高記録は1億件を33秒で投入(MBP 2019基準)

  • Pythonコードでループ: 1000万件で15分

→ バッチINSERTサイズを10万に調整: 10分に短縮

  • SQLite設定の最適化: journal_mode/synchrounous を無効化、キャッシュサイズ調整、exclusive lock

→ ループ版は1億件で10分、バッチ版は1億件で8.5分

  • PyPyに変更: バッチ版が1億件で2.5分に短縮(3.5倍)

  • Rustで実装: ループ版 + SQLite最適化で1億件を3分

→ Prepared Statement に変更し、50行ずつバッチINSERTすると、1億件で34.3秒

→ スレッド版に変更: Writerスレッド1本、データスレッド4本。32.37秒

  • SQLite DBの保存先を :memory: に変更すると2秒短縮して29秒

→ 1億行のフラッシュに2秒かかっているようだ

  • 次に試してみること(1分で10億件達成のために)

→ プロファイリングしてみる

→ マルチプロセス版で4コアを活用してみる

→ Goで書いた後にGCを無効化して実行

→ クレイジーなアイデア: SQLiteのファイルフォーマットを学んで、直接その形式で生成する

まだコメントはありません。

まだコメントはありません。