我有一個由兩個進程使用的SQLite數據庫。我想知道,使用最新版本的SQLite,當一個進程(連接)啓動一個事務來寫入數據庫時,另一個進程是否可以同時從數據庫中讀取?我可以從多個連接同時讀寫SQLite數據庫嗎?
回答
我收集的信息從各種來源,大部分來自sqlite.org,並把它們放在一起:
首先,默認情況下,多個進程可以有相同的SQLite數據庫在同一時間打開,幾個讀訪問可以平行滿足。
在寫入的情況下,對數據庫的單次寫入會在短時間內鎖定數據庫,即使是讀取,也不會有任何內容訪問數據庫文件。
從版本3.7.0開始,提供了一個新的「Write Ahead Logging」 (WAL)選項,其中讀取和寫入可以同時進行。
默認情況下,WAL未啓用。要打開WAL,請參閱SQLite文檔。
journal_mode = WAL解決了我的問題! – 2015-08-21 06:55:36
SQLite3的明確允許multiple connections:
(5)多個應用程序或同一 應用訪問,同時一個單一的數據庫文件中的多個實例?
多個進程可以同時打開同一個數據庫。 多個進程可以同時做一個SELECT。但是,只有 一個進程可以在 的任何時刻對數據庫進行更改。
用於共享連接,使用SQLite3 shared cache:
與3.3.0版本開始,SQLite的包括一個特殊的 「共享緩存」 模式(默認禁用)
在版本3.5.0,共享高速緩存模式被修改,以便可以在整個進程中共享同一個 高速緩存,而不是在單個線程內共享。
5.0啓用共享高速緩存模式
共用高速緩衝存儲器模式是基於每個進程的基礎上啓用。使用C 接口,以下API可用於全局啓用或禁用 共享高速緩存模式:
INT sqlite3_enable_shared_cache(INT);
每個呼叫sqlite3_enable_shared_cache()的影響隨後的數據庫使用sqlite3_open(),sqlite3_open16(創建 連接),或 sqlite3_open_v2()。已經存在的數據庫連接是 不受影響。每次調用sqlite3_enable_shared_cache()都將覆蓋以前在同一進程中調用的所有 。
- 1. 有多少數據庫可以連接到Sqlite連接?
- 2. 多個用戶可以同時使用Java連接到Microsoft Access數據庫嗎?
- 3. 可以excel讀寫phpmyadmin數據庫嗎?
- 4. 我可以從2個不同的DB2數據庫中加入數據嗎? (像SQL Server連接數據庫)
- 5. 同一個sqlite數據庫的不同連接可以同時開始事務嗎?
- 6. JDBC連接字符串可以指定多個數據庫嗎?
- 7. 可以用javascript連接數據庫嗎
- 8. 構建SQLite數據庫以分離可讀/寫數據
- 9. 多個線程可以同時將數據寫入文件嗎?
- 10. iPhone SQLite數據庫讀寫
- 11. 我們可以使用單個數據庫連接同時從多個線程執行多個數據庫選擇語句嗎?
- 12. 我可以連接來自不同數據庫的兩個表嗎?
- 13. 我們可以使用連接兩個不同的數據庫表嗎?
- 14. 從多個tcp連接讀取數據
- 15. MS SQL - 多個用戶可以通過Web服務(c#)連接/讀取/寫入數據庫嗎?
- 16. 我們可以爲同一對錶有多個連接表嗎?
- 17. Magento 2 seperate讀/寫數據庫連接
- 18. 1個PHP文件可以連接到2個數據庫嗎?
- 19. 從rails中連接sqlite數據庫
- 20. 如何從WindowsApplication Sqlite數據庫連接
- 21. SharePoint 2010 - 我們可以從同一個Web部件創建多個連接嗎?
- 22. 多表連接 - 我可以添加一個外連接嗎?
- 23. 連接到SQLite數據庫
- 24. 我可以同步從iPhone的SQLite數據庫的多個記錄到服務器上的mysql數據庫
- 25. 我們可以使用odbc只與java連接數據庫嗎?
- 26. SQLite數據庫文件可以只讀嗎?
- 27. 多個數據庫連接
- 28. 多個數據庫連接
- 29. 多個數據庫連接
- 30. 我可以擁有連接到OpenXava中不同數據庫的實體嗎?
相關問題請看這裏.. http:// stackoverflow。com/questions/12117016/strategies-for-concurrent-read-writing-and-reading-in-sqlite/24038860#24038860 – Nepster 2014-06-04 13:35:50