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

问题描述 投票:0回答:3

我的应用程序允许多个用户上传他们自己的 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* 数据库名称,const int 键,const int 值)

字符串读取(const char* 数据库名称,const char* 键)

int Read(const char* 数据库名称, int key)

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

有什么建议吗?

c++ performance fork shared-memory nosql
3个回答
0
投票

您可以创建一个使用 STL

std::map
std::unordered_map
存储数据的进程,并使用具有请求/答复模式的 IPC 套接字,以便其他进程访问数据(它们使用密钥请求数据并在答复中获取数据) ).

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


0
投票

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

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


-1
投票

我设计并实现了一个内存数据库,目前大型工业组织正在使用该数据库。我拥有数据库权利及其源代码。它的API是C和C++。它可以序列化/反序列化为文件。一个进程可以同时打开多个数据库。它有 MDI GUI 编辑器。它是一个纯粹的基于 Win32-API 的(没有 STL 或任何其他库)。对Win32 API 的依赖主要用于内存操作和归档。您所需要的只是 .h 和 .lib (MBCS/UNICODE)。 如果有人感兴趣,请给我留言@[电子邮件受保护]。干杯。

© www.soinside.com 2019 - 2024. All rights reserved.