数据共享 - SQLite与共享内存IPC

时间:2012-12-25 17:34:02

标签: sqlite shared-memory embedded-linux

我想就数据共享的设计实现发表意见。

我正在研究Linux嵌入式设备(mips 200 Mhz),我希望在多个进程之间进行某种数据共享,这可以同时读取或写入多个参数。

此数据包含~200个字符串参数,每秒更新一次。 进程可以在1秒内访问大约10次的数据。

我非常想尝试使设计高效(CPU / Mem)。

此数据不需要是持久性的,并且每次重新启动时都会重新创建。

目前,我正在考虑两种选择:

  1. 使用分片内存IPC(SHM)+信号量(锁定所有SHM)。
  2. 使用基于SQLite内存的数据库。
  3. 对于任一选项,我将提供一个C接口库,它将执行数据库操作的所有逻辑。

    对于SHM,这意味着锁定/解锁信号量并访问可称为索引数组的参数。

    对于SQLite,我的库将是SQLite接口库的包装器,因此该过程不必知道SQL语法(应该对查询和回复进行一些解析)。

    我相信共享内存更有效:

    无需使用和解析SQL,并且可以作为数组进行访问。

    说,使用SQLite也有一些优点: 已经工作和调试(数据库级别)。 增加灵活性。 在许多嵌入式系统中广泛使用。

    明白了,

    性能方面,我没有使用SQLite的经验,如果您能分享您的意见和经验,我将不胜感激。

    由于

1 个答案:

答案 0 :(得分:-1)

SQLite的内存数据库无法在进程之间共享,但您可以将数据库文件放入tmpfs

但是,SQLite不会在进程之间进行任何同步。它 锁定数据库文件以防止更新冲突,但如果一个进程发现文件已经锁定,它只是等待一段随机的时间。

对于进程之间的高效通信,您需要使用SHM /信号量或管道等机制。