我有一个由两个进程使用的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. 可以同时写入/读取同一个数据流吗?
- 3. 你可以同时读写windows phone 8数据库吗?
- 4. 多个用户可以同时使用Java连接到Microsoft Access数据库吗?
- 5. 可以excel读写phpmyadmin数据库吗?
- 6. 我可以用Play2同时连接10,000个连接吗?
- 7. 我可以从2个不同的DB2数据库中加入数据吗? (像SQL Server连接数据库)
- 8. 同一个sqlite数据库的不同连接可以同时开始事务吗?
- 9. 可以在Dropwizard中配置多个数据库连接吗?
- 10. JDBC连接字符串可以指定多个数据库吗?
- 11. 可以用javascript连接数据库吗
- 12. 构建SQLite数据库以分离可读/写数据
- 13. 多个线程可以同时将数据写入文件吗?
- 14. 我可以同时包含MySQL和MySQLi数据库连接文件吗?
- 15. iPhone SQLite数据库读写
- 16. 我应该打开一个或多个连接到本地SQLite数据库吗?
- 17. 我们可以使用单个数据库连接同时从多个线程执行多个数据库选择语句吗?
- 18. 我可以直接连接到AngularJS的MySQL数据库吗?
- 19. 我可以连接来自不同数据库的两个表吗?
- 20. 我们可以使用连接两个不同的数据库表吗?
- 21. 多个应用程序可以访问SQLite数据库吗?
- 22. SQLite同时读写
- 23. MS SQL - 多个用户可以通过Web服务(c#)连接/读取/写入数据库吗?
- 24. 从多个tcp连接读取数据
- 25. 我们可以为同一对表有多个连接表吗?
- 26. Google Glass可以同时连接到多个蓝牙设备吗?
- 27. Magento 2 seperate读/写数据库连接
- 28. 有连接到我的SQLite数据库
- 29. 1个PHP文件可以连接到2个数据库吗?
- 30. 多表连接 - 我可以添加一个外连接吗?
相关问题请看这里.. http:// stackoverflow。com/questions/12117016/strategies-for-concurrent-read-writing-and-reading-in-sqlite/24038860#24038860 – Nepster 2014-06-04 13:35:50