首页 文章

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

提问于
浏览
1

我的应用程序允许多个用户上传他们自己的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

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

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

  • 0

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

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

相关问题