【发布时间】:2014-11-17 01:40:30
【问题描述】:
我的应用程序允许多个用户上传他们自己的 Lua 脚本,我希望添加一个数据库功能,没有什么强大的功能,只是一个键/值存储或 NoSQL 类型的东西。
应用程序是一个分叉服务器,因此每个数据库的多个副本非常浪费。
每次应用程序加载时,数据库都会从 Lua 脚本中重新加载,然后自毁(加载后无需保留加载数据)。
我对 MongoDB 和 Redis 非常熟悉,而这些支持的操作对于我的需要来说是多余的。真的,一个 STL 映射就足够了,除了我需要共享数据,而不是每个进程的每个分叉实例的数据的单独副本。我无法可靠地工作的 boost 共享内存 STL 类,并且该服务器需要非常非常可靠。 (如果没有更简单的方法,我会考虑将 Redis 编译到共享模块 (.so) 中)
在此背景下,我正在寻找具有以下特性的仅内存数据库(按优先级顺序,列表中后面的那些不太重要,但仍然需要。
C++源代码
支持 FindGreaterThanOrEqual (upper_bound) 和 FindLessThanOrEqual (lower_bound) 的键值存储 NoSQL
作为主进程的一部分链接或编译,而不是单独的进程。我不希望我们的 DevOP 不得不处理单独的服务器,这又会出错。
不使用 IPC 跨多个进程共享访问,仅共享内存(为了速度)
使用类似这样的 API 非常容易使用(非常粗略的想法):
写入(const char* database_name, const char* key, const char* value)
Write(const char* database_name, const int key, const int value)
字符串读取(const char* database_name, const char* key)
int Read(const char* database_name, int key)
无需创建数据库,如果不存在,则写入应该隐式创建它,而对缺失数据库的读取就像缺失值一样。
有什么建议吗?
【问题讨论】:
-
SharedHashFile [1] 接近您的要求。有什么用? -- 西蒙 [1] github.com/simonhf/sharedhashfile
标签: c++ performance fork shared-memory nosql