我正在搜索一个数据库:
- 可以保护二进制键/二进制值对并通过键返回它们,
- 易于使用,
- 很容易嵌入到我的 C++ 应用程序中,
- 在低端机器(即任何只有足够硬盘空间的台式机)上处理大量数据(~100GB)没有问题,
- 不存在大量键/值对(1000M 或更多)的问题,
- 将数据存储在硬盘上,
- 根据之前的数据在重新启动时非常快速/立即初始化。
更具体地说,我想在这里使用它:png-db .
到目前为止,我已经尝试过:
文件系统本身,以十六进制表示形式存储的键作为文件名,值作为文件内容。
唯一真正的问题是大量的键/值对。大约 50MB 的数据产生大约 10 万个文件(即键/值对)。
Redis .
主要问题是它试图将所有内容保存在内存中(或它自己的虚拟内存实现,但这并不能真正解决问题)。所以显然它无法处理如此庞大的数据量。而且启动也很慢,因为它将整个数据库读入内存。
-
到目前为止效果最好,但在关闭和重新加载数据库时有一些奇怪的行为。特别是对于重新加载,有时需要几分钟来加载数据库(大小约为 1GB)。我不明白为什么加载数据库不应该花费固定的时间。
我想到的其他数据库:
- SQLite。我还没有真正使用过它;我只知道是esp。被嵌入。但我觉得 SQL 语言对于我的用例来说有点矫枉过正,而且我也可能会遇到二进制数据的问题(或者我不确定我应该如何处理它;逃避一切?那会很慢)。
那么,您有什么建议?
最佳答案
Berkeley DB具有您正在寻找的功能。它是链接到您的应用程序的库。它很小而且非常快。它支持键/值对和易于使用的 API。很portable, reliable and scalable .它在许多平台上运行。它专为在受限环境中使用而设计,可在许多不同的设备和设备上运行。
免责声明:我是 Berkeley DB 的产品经理,所以我有点偏见。但 BDB 的设计正是为了满足您的需求——快速、可靠、便携、可扩展的嵌入式数据存储。我们多年来一直在做键/值对。在 NoSQL 流行之前,我们是 NoSQL。 :-)
祝您搜索顺利。 - 戴夫
关于database - 易于使用/嵌入二进制安全的键/值数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220472/