用于存储二进制数据的键/值数据库

时间:2012-03-21 11:08:10

标签: database sqlite binary nosql binary-data

我正在寻找一个轻量级,可靠且快速的键/值数据库来存储二进制数据。简单没有服务器。大多数流行的键/值数据库(如CDB和BerkeleyDB)本身不存储BLOB。什么是我错过的最佳选择?

我目前的选择是SQLite,但它对于我的简单用法而言太先进了。

6 个答案:

答案 0 :(得分:8)

正如之前所指出的,BerkeleyDB确实支持不透明的值和键,但我建议一个更好的选择:LevelDB。

<强>性LevelDB:

Google是你的朋友:),以至于他们甚至为您提供了一个嵌入式数据库:A fast and lightweight key/value database library by Google.

功能

  • 键和值是任意字节数组。
  • 按键排序存储数据。
  • 来电者可以提供自定义比较功能来覆盖排序顺序。
  • 基本操作是Put(键,值),Get(键),Delete(键)。
  • 可以在一个原子批次中进行多项更改。
  • 用户可以创建临时快照以获得一致的数据视图。
  • 数据支持前向和后向迭代。
  • 使用Snappy压缩库自动压缩数据。
  • 通过虚拟接口中继外部活动(文件系统操作等),以便用户可以自定义操作系统交互。
  • 源代码中包含有关如何使用该库的详细文档。

答案 1 :(得分:3)

是什么让你认为BerkDB无法存储二进制数据?来自他们的文档:

  

键和内容参数是datum typedef描述的对象。数据指定dptr指向的dsize字节字符串。允许使用任意二进制数据以及普通文本字符串。

另见examples

money = 122.45;
key.data = &money;
key.size = sizeof(float);
...
ret = my_database->put(my_database, NULL, &key, &data, DB_NOOVERWRITE);

答案 2 :(得分:1)

如果您不需要&#34;多个编写程序进程&#34; (只有多个读者可以工作),想要一些小东西,想要几乎每个linux上都可用的东西,你可能想看看gdbm,就像berkeley db,但更简单。它也可能不那么快。

在几乎相同的区域有tokyocabinet,qdbm和已经提到的leveldb。

Berkeley db和sqlite领先于它们,因为它们支持多个编写器。 berkeley db有时是一个版本控制器。

gdbm的主要专家:它已经在每个linux上,没有版本问题,很小。

答案 3 :(得分:0)

你在运行哪个操作系统?对于Windows,您可能需要查看ESE,这是一个非常强大的存储引擎,作为操作系统的一部分提供。它支持Active Directory,Exchange,DNS和其他一些Microsoft服务器产品,并被许多第三方产品使用(RavenDB作为一个很好的例子)。

答案 4 :(得分:0)

答案 5 :(得分:0)

现在使用sqlite直接使用自2014-06以来可用的新函数readfile(X)和writefile(X,Y)。例如,从文件中保存数据库中的blob并再次提取

     CREATE TABLE images(name TEXT, type TEXT, img BLOB);
     INSERT INTO images(name,type,img) VALUES('icon','jpeg',readfile('icon.jpg'));
     SELECT writefile('icon-copy2.jpg',img) FROM images WHERE name='icon';

请参阅https://www.sqlite.org/cli.html&#34;文件I / O功能&#34;