database - 易于使用/嵌入二进制安全的键/值数据库

标签 database sqlite nosql redis

我正在搜索一个数据库:

  • 可以保护二进制键/二进制值对并通过键返回它们,
  • 易于使用,
  • 很容易嵌入到我的 C++ 应用程序中,
  • 在低端机器(即任何只有足够硬盘空间的台式机)上处理大量数据(~100GB)没有问题,
  • 不存在大量键/值对(1000M 或更多)的问题,
  • 将数据存储在硬盘上,
  • 根据之前的数据在重新启动时非常快速/立即初始化。

更具体地说,我想在这里使用它:png-db .

到目前为止,我已经尝试过:

  • 文件系统本身,以十六进制表示形式存储的键作为文件名,值作为文件内容。

    唯一真正的问题是大量的键/值对。大约 50MB 的数据产生大约 10 万个文件(即键/值对)。

  • Redis .

    主要问题是它试图将所有内容保存在内存中(或它自己的虚拟内存实现,但这并不能真正解决问题)。所以显然它无法处理如此庞大的数据量。而且启动也很慢,因为它将整个数据库读入内存。

  • KyotoCabinet .

    到目前为止效果最好,但在关闭和重新加载数据库时有一些奇怪的行为。特别是对于重新加载,有时需要几分钟来加载数据库(大小约为 1GB)。我不明白为什么加载数据库不应该花费固定的时间。

我想到的其他数据库:

  • SQLite。我还没有真正使用过它;我只知道是esp。被嵌入。但我觉得 SQL 语言对于我的用例来说有点矫枉过正,而且我也可能会遇到二进制数据的问题(或者我不确定我应该如何处理它;逃避一切?那会很慢)。

那么,您有什么建议?

最佳答案

Berkeley DB具有您正在寻找的功能。它是链接到您的应用程序的库。它很小而且非常快。它支持键/值对和易于使用的 API。很portable, reliable and scalable .它在许多平台上运行。它专为在受限环境中使用而设计,可在许多不同的设备和设备上运行。

免责声明:我是 Berkeley DB 的产品经理,所以我有点偏见。但 BDB 的设计正是为了满足您的需求——快速、可靠、便携、可扩展的嵌入式数据存储。我们多年来一直在做键/值对。在 NoSQL 流行之前,我们是 NoSQL。 :-)

祝您搜索顺利。 - 戴夫

关于database - 易于使用/嵌入二进制安全的键/值数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220472/

相关文章:

php - PHP和MYSQL登录表单不起作用

php - 我想从数据库中获取最后插入的数据

c++ - 如何在多线程应用程序中使用 SQLite?

mongodb - 在 NoSQL (MongoDB) 中存储/同步 Facebook Graph

SQL Server 2008 R2 卡在单用户模式

objective-c - 如何在嵌入式 webkit 应用程序中启用 HTML 客户端 SQL 数据库(github 上的测试应用程序)

android - 如何在android上根据时间戳删除sqlite数据库中的条目

Android:从在线数据库更新本地数据库

javascript - 创 build 计文档后如何构建cloudant索引?

mongodb - 仅更新 MongoDB 中存在的特定字段