sqlite - 多个进程共享的内存中 SQLite 数据库

标签 sqlite

我有一个系统,其中多个进程成功共享一个基于 SQLite 磁盘的数据库。数据库的大小和性质决定了总是需要更快的访问速度,而数据库无论如何都是临时的,因此将其完全保存在内存中听起来是个好主意。我知道 SQLite 支持 in memory databases但似乎没有办法与另一个进程共享内存数据库(或者至少我是这样理解的)。考虑到 SQLite 似乎使用 file mappings我看不出为什么进程共享的内存数据库不存在(至少在理论上)。

我很想知道是否有人知道这样做的方法或有其他建议。

最佳答案

确实,SQlite 不支持与其他进程共享内存数据库。几乎没有理由实现这样的功能,因为用例大多是人为的。您将性能作为一个用例,但如果您在 Linux 上,则可以在 tmpfs 上创建一个基于文件的数据库。否则,您仍然可以使用许多 pragma,例如 PRAGMA synchronous=OFF;通过放弃持久性来加速你的数据库。更进一步,您可以使用 PRAGMA journal_mode=MEMORY;在内存中准备提交,甚至使用 PRAGMA journal_mode=OFF;如果您根本不需要事务支持。

缺乏支持的主要原因之一是需要锁定。 SQlite 需要一些方法来锁定数据库,目前这些锁定操作与 SQlite VFS 实现中的文件操作相关联。您可能仍然能够实现自己的在内存中工作的 VFS 模块,但您可能会冒着实现文件系统的风险。

关于sqlite - 多个进程共享的内存中 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051263/

相关文章:

android - 从 Android 中的数据库中检索日期明智的数据

c# - 桌面应用程序部署——尝试编写只读数据库 sqlite

javascript - Ionic Framework (AngularJS) 和数据库 SQLite 3

iphone - 如何修改 NSMutableArray 属性?

objective-c - 将数组存储到 SQLite 数据库中

java - IllegalArgumentException:无效列

android - getWritableDatabase() 抛出空指针异常

android - Android中的SQLite Datediff替代品与排序

Java错误ENOENT(没有这样的文件或目录)

java - Sqlite 与 hibernate 和 spring-boot