寻找一个易于使用的C++嵌入式键值存储

rod*_*gob 7 c++ large-data-volumes protocol-buffers key-value-store

我需要编写一个C++应用程序来读取和写入大量数据(超过可用的RAM),但总是按顺序方式.

为了使数据保持未来的证明和易于记录的方式,我使用Protocol Buffer.然而,协议缓冲区不处理大量数据.

我以前的解决方案包括为每个数据单元创建一个文件(并将它们全部存储在一个目录中),但这似乎不是特别可扩展.

这次我想尝试使用嵌入式数据库.为了具有类似的功能,我只需要存储key-> values关联(因此sqlite似乎有点矫枉过正).值将是Protocol Buffer的二进制序列化输出.

我希望数据库能够管理"内存中的内容,移动到磁盘上的内容"问题,"如何有效地在磁盘上存储大量数据"问题,理想情况下,优化我的顺序读取模式(通过阅读事前的下一个条目).

寻找替代品我对缺乏替代品感到惊讶.我不想将数据库保留在一个单独的进程中,因为我不需要这种分离(这排除了redis).

我发现的唯一选择是Berkeley DB,但它有一个令人不快的低级别C api.然后,我找到的最佳选择是在Berkeley DB之上的stldb4.API似乎非常好,符合我的需求.

不过我很担心.stldb4似乎很奇怪(它依赖于libferris的东西),非维护的解决方案(一年前的最后一个版本),对于我会遇到的问题很常见.

你们中有谁对如何管理这个问题有更好的建议吗?

谢谢你的回答.

rod*_*gob 5

我想我找到了问题的答案.

我没注意到Berkeley DB 为C++ 提供了两个 API:

  • 像香草C一样的API
  • 一个STL API

此STL API提供STL兼容的向量和映射抽象,可直接访问数据库.这样做value = data_container[key]就成了可能.

这对我来说似乎是最好的解决方案; 直接使用Berkeley DB STL API协议缓冲区.