我正在寻找用于存储二进制数据的轻量级,可靠且快速的键/值数据库。简单没有服务器。大多数流行的键/值数据库(如CDB和BerkeleyDB)本身不会存储BLOB
。什么可以是我错过的最佳选择?用于存储二进制数据的键/值数据库
我目前的选择是SQLite,但它太高级了,我的简单用法。
我正在寻找用于存储二进制数据的轻量级,可靠且快速的键/值数据库。简单没有服务器。大多数流行的键/值数据库(如CDB和BerkeleyDB)本身不会存储BLOB
。什么可以是我错过的最佳选择?用于存储二进制数据的键/值数据库
我目前的选择是SQLite,但它太高级了,我的简单用法。
正如先前指出,BerkeleyDB的不支持不透明值和键,但我会提出一个更好的选择:性LevelDB。
性LevelDB:
谷歌是你的朋友:),以至于他们甚至为您提供一个嵌入式数据库:A fast and lightweight key/value database library by Google.
特点:
是什么让你觉得BerkDB无法存储二进制数据?从他们的文档:
键和内容参数是基准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);
如果你不需要“多个写入器进程”(只有多个读取器工作),想要一些小东西,想要几乎每一个linux上都有的东西,你可以看看gdbm,它是像伯克利分贝,但更简单。它也可能不那么快。
在几乎相同的领域,像tokyocabinet,qdbm和已经提到的leveldb。
Berkeley db和sqlite都领先于那些,因为它们支持多个编写者。 berkeley db有时是版本化的毁灭者。
gdbm的主要职业:它已经在每一个linux上,没有版本问题,很小。
使用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 “文件I/O功能”
我在Linux(Ubuntu的)。 – Googlebot 2012-03-21 11:22:19
您是否认为简单的“文件系统作为db”选项?文件内容=值... – Addys 2012-03-21 13:01:47
@Addys:我很喜欢这个系统,你应该把它作为正确的答案 – hroptatyr 2012-03-21 13:22:02