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



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

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

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

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

有了这种背景,我正在寻找一个具有以下品质的仅内存数据库(按优先级顺序,列表中后面的那些不太重要,尽管仍然需要。

C++源代码

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

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

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

非常

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

写入(常量字符* database_name, 常量字符* 键, 常量字符* 值)

Write(const char* database_name, const int

key, const int value)

字符串读取(常量字符* database_name,常量字符* 键)

int Read(const char* database_name, int key)

无需创建数据库,

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

有什么建议吗?

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

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

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

如果您需要带有内置数据库的Lua语言解释器,则可以查看 http://tarantool.org

最新更新