我正在寻找一个轻量级,可靠且快速的键/值数据库来存储二进制数据。简单没有服务器。大多数流行的键/值数据库(如CDB和BerkeleyDB)本身不存储BLOB
。什么是我错过的最佳选择?
我目前的选择是SQLite,但它对于我的简单用法而言太先进了。
答案 0 :(得分:8)
正如之前所指出的,BerkeleyDB确实支持不透明的值和键,但我建议一个更好的选择:LevelDB。
<强>性LevelDB:强>
Google是你的朋友:),以至于他们甚至为您提供了一个嵌入式数据库:A fast and lightweight key/value database library by Google.
功能强>
答案 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;