繁体   English   中英

寻找具有一定品质的完全内存数据库

[英]Looking for completely in-memory database with certain qualities

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

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

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

我对MongoDB和Redis相当熟悉,这些支持对于我所需要的操作而言是过大的。 确实,一个STL映射就足够了,只是我需要共享数据,而不是每个流程的每个派生实例都不需要单独的数据副本。 我无法可靠地使用Boost共享内存STL类,并且该服务器必须非常非常可靠。 (如果没有更简单的方法,我会考虑将Redis编译为共享模块(.so))

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

C ++源代码

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

链接或编译为主过程的一部分,而不是单独的过程。 我不希望我们的DevOP不得不处理单独的服务器,这又是一件错误的事情。

在不使用IPC的情况下跨多个进程的共享访问,仅共享内存(为了提高速度)

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

写入(const char *数据库名称,const char *键,const char *值)

写入(const char * database_name,const int键,const int值)

字符串读取(const char * database_name,const char *键)

int读取(const char * database_name,int键)

无需创建数据库,如果尚不存在,则写操作应隐式创建它,而对丢失的数据库的读取则就像丢失值一样。

有什么建议么?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM