我正在尋找用於存儲二進制數據的輕量級,可靠且快速的鍵/值數據庫。簡單沒有服務器。大多數流行的鍵/值數據庫(如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