存储压缩文件的数据库

时间:2012-11-15 09:47:35

标签: mysql database redis storage bigdata

我们使用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 Server同时做其他事情)。

我会查询数据非常罕见,但我希望能够得到它们 一个接一个轻松。

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)

并且redis应该有:

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键所以会有15.000.000 * 3个文件。

我也使用Linux和ext3文件系统

1 个答案:

答案 0 :(得分:0)

我会尝试将所有内容保存在一个系统中。你真的需要Redis来管理密钥集吗?经常访问的数据库表应该主要缓存在内存中。