Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 易于使用/嵌入二进制安全密钥/值数据库_Database_Sqlite_Nosql_Redis - Fatal编程技术网

Database 易于使用/嵌入二进制安全密钥/值数据库

Database 易于使用/嵌入二进制安全密钥/值数据库,database,sqlite,nosql,redis,Database,Sqlite,Nosql,Redis,我正在搜索以下数据库: 可以保护二进制键/二进制值对并按键返回它们 易于使用 很容易嵌入到C++应用程序中, 在低端计算机(即任何只有足够硬盘空间的台式计算机)上,不会出现大量数据(~100GB)的问题 不存在大量键/值对(1000米或以上)的问题 将数据存储在硬盘上 在给定先前数据的情况下,重新启动时会非常快/立即初始化 更具体地说,我想在这里使用它: 到目前为止,我已经尝试: 文件系统本身,以十六进制表示形式存储的键作为文件名,值作为文件内容 唯一真正的问题是大量的键/值对。大约50M

我正在搜索以下数据库:

  • 可以保护二进制键/二进制值对并按键返回它们
  • 易于使用
  • 很容易嵌入到C++应用程序中,
  • 在低端计算机(即任何只有足够硬盘空间的台式计算机)上,不会出现大量数据(~100GB)的问题
  • 不存在大量键/值对(1000米或以上)的问题
  • 将数据存储在硬盘上
  • 在给定先前数据的情况下,重新启动时会非常快/立即初始化
更具体地说,我想在这里使用它:

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

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

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

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

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

我想到的其他DBs:

  • SQLite。我还没有真正使用过它;我只知道它是特别为嵌入而制作的。但是我觉得SQL语言对于我的用例来说有点过分了,而且我可能会在处理二进制数据时遇到麻烦(或者我不知道应该如何处理它;逃避一切?那会很慢)

那么,您有什么建议?

如果您对将二进制键转换为十六进制实现没问题,您可以尝试任何您喜欢的数据库,但在低端机器上,主要的瓶颈将是磁盘IO

你会有很多表和它们之间的关系,还是仅仅是一个大的键值对?如果是这样一个简单的列表,你可以自己写一些东西。其基础可能是Windows的结构化存储实现。这实际上是文件中的一种文件系统,Microsoft Office应用程序(包括Word和Access)使用它来存储数据

写入这些文件可能非常快,但随着时间的推移,它们会变得支离破碎,因为如果没有足够大的空闲空间,数据会在最后写入。在这种情况下,您需要压缩文件,这显然需要一点时间。因此,最好不要创建巨大的文件,而是将文件系统的强大功能与这些文件的强大功能结合起来,因为这样可以防止您删除数以百万计的文件(浪费数以百万计的部分集群),同时还可以轻松维护,因为数据文件也不太大

当然,如果结构化存储看起来太复杂或太慢,或者确实有太多的开销,您也可以提出自己的数据文件

但请记住,要从一个简单的单磁盘桌面设置中快速、即时地运行100 GB的数据库是很困难的。

具有您所需要的功能。它是链接到您的应用程序的库。它又小又快。它支持键/值对和易于使用的API。这很有趣。它运行在很多平台上。它被设计用于受限环境,并在许多不同的设备和设备上运行

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


祝你搜索好运Dave

这将是一个包含大量键/值对的大容器。但我需要一个跨平台的解决方案。我已经想过自己实现它,但我真的不想重新发明轮子;我很确定肯定已经有一些东西非常适合这里了。啊,我对fast的意思是:在这样一台机器上,给定一个大小类似的真实文件系统,随机文件访问性能应该与DB中的随机键/值访问性能相同或更慢。DB系统的启动应该与安装这样一个文件系统差不多。(毕竟,也许像ReiserFS这样的东西真的最适合我,但我不确定。)如果你想让它比文件系统快,你不能使用文件系统。:)非常感谢你的推荐。我已经考虑过了,但没有找到一个快速简单的方法,也不确定它是否真的适合我的需要,所以我选择了其他提到的DBs。你能给我一个好的推荐信,在那里我可以找到我需要的东西吗?类似于示例。Berkeley DB下载中包含了几个代码示例。在BDB的“了解更多”选项卡上还有两个录制的BDB教程: