我需要编写一个 C++ 应用程序来读取和写入大量数据(超过可用 RAM),但始终以顺序方式进行。
为了将数据保存在未来的证明中并且易于记录,我使用协议缓冲区。然而,协议缓冲区不处理大量数据。
我之前的解决方案包括为每个数据单元创建一个文件(并将它们全部存储在一个目录中),但这似乎不是特别可扩展。
这次我想尝试使用嵌入式数据库。要拥有类似的功能,我只需要存储 key->values 关联(因此 sqlite 似乎有点矫枉过正)。值将是来自 Protocol Buffer 的二进制序列化输出。
我希望数据库能够管理“在内存中保留什么,将什么移动到磁盘 asp”问题,“如何在磁盘上有效地存储大量数据”问题,理想情况下,优化我的顺序读取模式(通过读取之前的下一个条目)。
寻找替代品 我对缺乏替代品感到惊讶。我不想将数据库保留在一个单独的进程中,因为我不需要这种分离(这排除了 redis)。
我发现的唯一选择是 Berkeley DB,但它有一个令人不快的低级 C api。然后,我发现最好的选择是在 Berkeley DB 之上的 stldb4。API 看起来很不错,符合我的需要。
不过我很担心。stldb4似乎很奇怪(它依赖于 libferris 的东西),未维护的解决方案(一年前的最后一个版本),对于一个我认为很常见的问题。
你们中有人对如何管理这个问题有更好的建议吗?
感谢您的回答。