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

标签 sqlite shared-memory embedded-linux

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

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

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

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

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

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

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

  • 对于任一选项,我将提供一个 C 接口(interface)库,它将执行 DB 操作的所有逻辑。

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

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

    我相信共享内存更有效:

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

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

    切入正题,

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

    谢谢

    最佳答案

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

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

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

    关于sqlite - 数据共享 - SQLite 与共享内存 IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14032711/

    相关文章:

    java.sql.SQLException : near "on": syntax error problem

    c++ - PThread 强大的互斥锁不起作用

    c++ - Boost共享内存无法初始化

    linux - 在没有 DST 和有 DST 的 Linux 中获取时间

    python - 如何确保与 sqlite 和 NFS 的安全文件同步

    Android SQLite 在 170 行后崩溃

    java - 在 JVM 之间共享类

    c++ - 如何将 SQLite c 文件(合并)与 cpp 应用程序链接?

    c++ - 为 sh4 架构构建 boost 库

    ios - NSUnderlyingException = "Can' t 两次添加相同的存储”在迁移核心数据时