sqlite在内存数据库中共享

sqlite shared in memory database

这实际上已经困扰我几天了。我有一个 sqlite 数据库(大约 300 兆字节),我需要非常快地从中读取。这就是为什么我决定在具有备份功能的 sqlite 中使用内存模式的原因。这是我的问题 sqlite doc. Here is mu struggle. When I use URI filename ":memory:" and then backup.

Everythink 很好我什至在 htop 中看到该进程现在在内存中有 + 300 字节。所以每一个想法都是金。

但是因为我需要从多个线程访问这个数据库,所以我不能简单地共享指向数据库连接的单个指针。我想为我的内存数据库分配名称并将其缓存设置为共享。但是当我这样做时:

sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);

这是从文档中复制的 URI 文件名。备份数据库不再向 ma 内存进程添加 300MB 后,我的磁盘上创建了名称为 "file:memdb1?mode=memory&cache=shared" 的文件,我也尝试过 "file::memory:?cache=shared" 但结果相同。

我在 linux Fedora 31 和 sqlite 3.30.0

非常欢迎任何想法和建议。

谢谢大家

问题是您使用的 URI 文件名默认情况下为向后兼容而禁用。您需要启用 URI 文件名,请参阅 doc 了解您的选项。

云的一种方式很简单:

sqlite3_open_v2("file:memdb1?mode=memory&cache=shared", &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_URI, null);