【问题标题】:In-memory SQLite database shared by multiple processes多个进程共享的内存中 SQLite 数据库
【发布时间】:2012-08-21 08:50:13
【问题描述】:

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

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

【问题讨论】:

    标签: sqlite


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多