【发布时间】:2012-11-03 21:33:03
【问题描述】:
我们使用 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 个文件。
我也使用带有 ext3 文件系统的 Linux
【问题讨论】:
标签: mysql database redis storage bigdata