SQLite,多个应用程序可以同时访问单个数据库文件吗?

数据库 其他数据库
多个进程可以同时打开同一个数据库。多个进程可以同时执行SELECT。但是,只有一个进程可以随时对数据库进行更改。

多个进程可以同时打开同一个数据库。多个进程可以同时执行SELECT。但是,只有一个进程可以随时对数据库进行更改。

[[273693]]

SQLite使用读/写锁来控制对数据库的访问。(在Win95 / 98 / ME下,缺少对读写锁的支持,而是使用概率模拟。)但请注意:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作。这是因为许多NFS实现都会破坏fcntl()文件锁定。如果多个进程可能同时尝试访问该文件,则应避免将SQLite数据库文件放在NFS上。在Windows上,Microsoft的文档说如果您没有运行Share.exe守护程序,则在FAT文件系统下锁定可能不起作用。对Windows有很多经验的人告诉我,网络文件的文件锁定是非常错误的,并且不可靠。

我们知道没有其他嵌入式 SQL数据库引擎支持与SQLite一样多的并发性。SQLite允许多个进程一次打开数据库文件,并允许多个进程一次读取数据库。当任何进程想要写入时,它必须在更新期间锁定整个数据库文件。但这通常只需要几毫秒。其他流程只是等待作者完成然后继续他们的业务。其他嵌入式SQL数据库引擎通常只允许单个进程一次连接到数据库。

但是,客户端/服务器数据库引擎(如PostgreSQL,MySQL或Oracle)通常支持更高级别的并发性,并允许多个进程同时写入同一数据库。这在客户端/服务器数据库中是可能的,因为总有一个良好控制的服务器进程可用于协调访问。如果您的应用程序需要大量并发,那么您应该考虑使用客户端/服务器数据库。但经验表明,大多数应用程序需要的并发性远低于设计人员的想象。

当SQLite尝试访问由另一个进程锁定的文件时,默认行为是返回SQLITE_BUSY。您可以使用sqlite3_busy_handler()或sqlite3_busy_timeout() API函数从C代码调整此行为 。

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2023-12-29 22:39:25

Golang应用程序数据库

2009-07-02 09:35:02

hibernate访问

2009-09-28 13:33:48

Hibernate访问

2023-01-04 08:14:48

binlog参数生效

2010-08-12 21:13:49

数据库安全应用程序安全

2010-08-12 21:06:00

数据库应用程序数据库安全

2020-05-03 12:57:32

数据库DIY管道

2011-07-01 14:06:57

Qt sqlite

2018-07-13 09:20:30

SQLite数据库存储

2010-04-19 10:00:02

Oracle SQL

2022-10-24 14:21:09

数据库应用数据库数据管理

2011-06-07 10:12:27

2010-04-22 16:08:24

Oracle数据库

2009-11-18 16:23:26

PHP数据库文件

2011-03-03 13:13:51

DelphiSQLite加密

2010-01-27 18:33:16

Android SQL

2010-06-09 15:40:59

MySQL数据库文件

2010-06-02 17:06:54

MySQL数据库文件

2011-03-30 11:15:35

SQL Server数应用程序

2022-05-10 08:00:00

数据库数据库监控监控系统
点赞
收藏

51CTO技术栈公众号