SQLiteに問題があります。すべての呼び出しには300ミリ秒かかります。いくつかのテストの後、私は遅延がトランザクションによって引き起こされていることに気付きました。暗黙のトランザクションで8個の通常のインサートには約2秒かかりますが、挿入前にトランザクションを開始してからコミットすると、同時に約100万個のインサートを実行できます。影響を受けるコールには、DROP TABLE、CREATE TABLE、INSERTなどがあります。他のものも想定しています(おそらくすべて暗黙的にトランザクションを開始します)。SQLite C++ APIトランザクションが遅い
いくつかの詳細:SQLiteのWebサイトからソース合併をダウンロード
- (3200100)
- コンパイル、それ私が遊んでてきたが、任意のコンパイラフラグを使用していない(静的ライブラリにVisual Studioを使用私はマルチスレッドを実行を開始しないおよび/または最初の結果
- を受信するsqlite3_open16その後、sqlite3_prepare16_v3が続くとsqlite3_stepを使用しています
- )運のない彼らと、複数のプロセスからのアクセス、データベースファイルがexclusではありませんこのプログラムで積極的に開く
- SSD(960 EVO)でファイルを作成すると、「トランザクションの遅延」が300msから10msに短縮されます。しかし、やはり馬鹿げた高い価値ですが、ディスクの速度がトランザクションを遅くしているものに影響を与えてはいけないと感じていますか?
- ブロックしている機能は、sqlite3_step(それはまた、私はちょうど例えば、DROP TABLEを実行するためにその名前の関数を呼び出すために持っていることを私に不愉快ではなく、それは重要なこと)
- 編集です:トランザクション中、 CPU使用率は100%です。
テーブルのすべての行が正確に64バイトであることがわかっている場合は、データを整理してSQLiteを「手助けする」ことができますか?
私はあなたにこれを手伝ったり、代替案を提案したりしたいと思います(リレーショナル、C++ API、ファイルベース、高性能) ありがとう!
DROPおよびCREATE TABLEは、新しいデータベースを作成したり、既存のデータベーススキーマを複雑にアップグレードしたりしない限り、これらの2つのコマンドを実行するのが珍しいため、非常に高価になります。 DROP/CREATEは、データベースのメタデータ(スキーマ)に対しても大幅な変更/チェックを行う必要があります。 INSERTは、テーブルに多数のインデックス/外部キーがある場合を除き、高速でなければなりません。 –
これは[FAQ](http://www.sqlite.org/faq.html#q19)です。非同期で書き込む[WALモード](http://www.sqlite.org/wal.html)の使用を検討してください。 –