2012-11-15 136 views
0

我們使用Redis的數據庫爲:數據庫來存儲壓縮文件

key -> (file1, file2, file3) 

值始終爲三個壓縮文件的列表。

並非所有的按鍵則有3個文件,即

key2 -> (file4, file5) 

文件正在使用的zlib壓縮。 文件大小在50 - 120 K之間壓縮。

我想在數據庫中存儲「完整」密鑰(列表中有3個文件的密鑰), 。

到現在爲止,我存儲在MySQL表中的數據:

key_id : INTEGER , PRIMARY KEY 
first : BLOB 
second : BLOB 
third : BLOB 

這工作很細緩慢插入 除外(MySQL服務器不會在同一時間其他的東西)。

我會查詢非常罕見的數據,但我希望能夠輕鬆地逐一獲取它們 。

Redis是一個數據庫,我知道我可以轉儲到一個文件(rdb文件)。

所以我認爲使用另一個DBMS是減少的。 但是redis數據庫是內存有限的,所以我不能只是 等待完成值(文件)的生產,然後 只是轉儲到rdb文件。

我想創建包含 只有「完整」鍵的較小的rdb文件。 即

在時間1 Redis的包含以下內容:

key3 -> (a, b, c) 
key14 -> (e, f) 
key1 -> (g, h, i) 

那麼如果我決定轉儲轉儲文件到1.rdb只應包含以下內容:

key3 and key14 

如果是轉儲成功我將刪除已轉儲的密鑰(key3,key4)

and redis should have:

key14 -> (e, f) 

現在時間5 Redis的包含:

key5 -> (i, j , k) 
key14 -> (d, e, f) 
key6 -> (l, m) 

所以,如果我保存到2.rdb該文件只應包含:

KEY5,key14

,然後上面的鍵應該從redis中刪除。

這可能嗎?如果它很重要,我正在使用python。

你對這項任務有另一個想法嗎? 另一個DBMS,直接存儲到文件系統等

P.S忘記提及總共會有大約 15.000.000個密鑰,所以會有15000.000 * 3個文件。

而且我用Linux與ext3文件系統

+0

您可能可以使用新的(在redis 2.6中)[MIGRATE](http://redis.io/commands/migrate)命令來遷移(即將這些密鑰移動到另一個數據庫),然後[保存] (http://redis.io/commands/save)那個數據庫。 –

回答

0

我會嘗試把一切都在一個系統中。你真的需要Redis來管理這些按鍵嗎?經常訪問的數據庫表應該大部分保留在內存中。