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

Kim*_*mel 5 sqlite shared-memory embedded-linux

我想就数据共享的设计实现征求您的意见。

我正在 Linux 嵌入式设备(mips 200 Mhz)上工作,我希望在多个进程之间进行某种数据共享,这些进程可以一次读取或写入多个参数。

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

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

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

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

  1. 使用分片内存 IPC (SHM) + 信号量(锁定所有 SHM)。
  2. 使用基于 SQLite 内存的数据库。

对于任一选项,我将提供一个 C 接口库,它将执行数据库操作的所有逻辑。

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

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

我相信共享内存效率更高:

无需使用和解析SQL,以数组的形式访问。

话虽如此,使用 SQLite 也有一些优点:已经可以工作和调试(DB 级别)。增加灵活性。在许多嵌入式系统中广泛使用。

进入正题,

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

谢谢

CL.*_*CL. 1

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

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

为了在进程之间进行有效的通信,您需要使用诸如 SHM/信号量或管道之类的机制。