寻找具有某些品质的完全内存数据库

时间:2014-11-17 01:40:30

标签: c++ performance fork shared-memory nosql

我的应用程序允许多个用户上传他们自己的Lua脚本,我希望添加数据库功能,没有任何高性能,只是键/值存储或NoSQL类型的东西。

该应用程序是一个分叉服务器,因此每个数据库的多个副本都非常浪费。

每次加载应用程序时,都会从Lua脚本中重新加载数据库,然后自行销毁(无需在加载后保持加载数据)。

我对MongoDB和Redis非常熟悉,那些支持的操作对于我需要的东西来说太过分了。实际上,除了我需要共享数据之外,STL映射就足够了,而不是每个我的进程的分叉实例的数据的单独副本。 boost共享内存STL类我无法可靠地工作,这个服务器需要非常非常可靠。 (如果没有更容易的话,将Redis编译成共享模块(.so)是我会考虑做的事情)

有了这样的背景,我正在寻找一个具有以下特性的内存专用数据库(按优先顺序排列,后面的列表不太重要,但仍然需要。

C ++源代码

密钥值存储,NoSQL,支持FindGreaterThanOrEqual(upper_bound)和FindLessThanOrEqual(lower_bound)

作为主要流程的一部分链接或编译,而不是单独的流程。我不希望我们的DevOP必须处理单独的服务器,还有一件事要出错。

跨多个进程的共享访问,不使用IPC,只使用共享内存(速度)

非常容易使用这样的API(非常粗略的想法):

写(const char * database_name,const char * key,const char * value)

写(const char * database_name,const int key,const int value)

string Read(const char * database_name,const char * key)

int Read(const char * database_name,int key)

无需创建数据库,如果不存在则写入应隐式创建,并且对缺少的数据库的读取就像缺少值一样。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

对于嵌入式数据库,您可以将绑定添加到任何现代嵌入式库,例如http://sphia.orghttp://sophia.systems/

如果你需要一个带内置数据库的Lua语言解释器,你可以看看http://tarantool.org

答案 1 :(得分:0)

您可以创建一个使用STL std::mapstd::unordered_map存储数据的进程,并使用带有请求/回复模式的IPC套接字来访问其他进程(他们使用密钥和数据请求数据)在回复中获取数据。)

我强烈建议您查看ZMQ和/或Nanomsg,它们都是高性能,可靠的tcp和ipc通信库,并且在C ++中具有本机绑定。

相关问题