我有一個SQLite的問題。看起來每個通話都需要〜300ms才能執行。經過一些測試後,我注意到延遲是由交易引起的。隱式事務的8次正常插入大約需要2秒,但是,如果我在插入之前啓動一個事務並在之後提交,我可以在同一時間內執行近百萬次插入。受影響的調用包括DROP TABLE,CREATE TABLE,INSERT,我也假設其他人(可能所有這些都隱含地開始一個事務)。SQLite C++ API交易緩慢
一些更多的信息:
- 從網上下載SQLite的網站源合併(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可能非常昂貴,因爲除非創建新數據庫或對現有數據庫模式進行復雜升級,否則執行這兩個命令是不正常的。 DROP/CREATE還必須對數據庫元數據(模式)進行大量更改/檢查。 INSERT應該很快,除非在表上有許多索引/外鍵。 –
這是[FAQ](http://www.sqlite.org/faq.html#q19)。考慮使用[WAL模式](http://www.sqlite.org/wal.html),它可以異步寫入。 –