在多个应用程序之间共享内存中的SQLite数据库

时间:2011-05-19 16:19:54

标签: c sqlite

可以在内存中创建一个SQlite数据库:

rc = sqlite3_open(":memory:", &db);

但如果我已正确理解the documentation,则此数据库是创建它的应用程序的本地数据库。

我需要一个内存中的SQLite数据库,可以被多个应用程序访问。除了在ramdisk上创建数据库之外,还有什么方法可以做到这一点吗?

这适用于嵌入式Linux平台。

3 个答案:

答案 0 :(得分:4)

你不能跨进程共享一个内存数据库 - 它真的不是为了做到这一点,因为它缺乏正确的完整性承诺(但这意味着它更快) - 所以要么将数据库放在更永久的存储(例如ramdisk)或将数据库放在单个进程(“数据库管理器”)中并使用某种形式的本地通信策略(unix-domain套接字,命名管道等)允许要求数据库管理员对它们进行查询的其他进程。

答案 1 :(得分:1)

不,你必须在ramdisk / tmpfs上创建db,如果你想让它在内存中并与其他应用程序共享它。

答案 2 :(得分:0)

您可以在进程中创建数据库(以及跨进程锁),并在共享内存中使用必要的生命周期。您需要做的就是将其视为任何其他共享内存资源(记住在访问时锁定/解锁)。不幸的是,我认为这可能需要一些干扰SQLITE源来使用你提供的内存(共享)而不是自己分配。

http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/shm.h.html