sqlite vs 共享内存应用程序 vs ipc vs?
Posted
技术标签:
【中文标题】sqlite vs 共享内存应用程序 vs ipc vs?【英文标题】:sqlite vs shared memory app vs ipc vs? 【发布时间】:2012-09-17 18:00:12 【问题描述】:我什至不确定正确的术语,所以让我从我的目标开始:拥有一个简单的应用程序(“Data Doler”),它只会将大量数据从文件读取到内存中,并且然后将该数据的切片提供给名为“Data Lapper”的单个多线程应用程序,或提供给 Data Lapper 的多个实例。
Data Doler 只需要启动并读取一次数据块,因此我希望它至少在世界末日之前一直存在。 Data Doler 应该坐在那里闲置,等待 Data Lapper(s) 连接并开始请求数据。 Data Doler 将始终在具有 > 50 GB 内存的多核计算机上运行。
数据是静态的并且是只读的,并且它被编入索引,因此 Data Lapper 需要做的就是给 Data Doler 一个内存地址,它会立即取回所请求的确切数据片段。
Data Doler 可以用任何语言(C、C++、AtariBasic 等)编写。
我有 Data Lapper 的 C 源代码,所以我连接到 Data Doler 的方式是完全开放的。
我已经开始自学 SqlLite、共享内存应用程序、命名管道、ipc 等。但我希望有人可以告诉我应该叫哪棵树,或者我是否应该为我节省一些时间。我对这些东西一无所知,我还是呆在门廊上比较好。
【问题讨论】:
是高读还是高写?阅读是否有争议?施舍者保留数据多长时间? 为什么不让Data Lappers 直接读取文件,让操作系统的文件缓存来处理剩下的事情呢?以及哪个操作系统? 【参考方案1】:可能有一些比自己滚动更简单的解决方案,具体取决于吞吐量和数据的保留时间。
如果符合您的要求,像memcached 这样的东西会非常好。它在整个网络上都在使用。
如果您正在手工编写代码解决方案,您可以考虑boost interprocess。对于 IPC 来说是相当合理的。
【讨论】:
以上是关于sqlite vs 共享内存应用程序 vs ipc vs?的主要内容,如果未能解决你的问题,请参考以下文章
在应用程序之间共享数据 - 共享内存 vs D-Bus vs 文件操作
进程之间的通信:tcp vs unix sockets,ipc vs nats