我们使用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文件系统
答案 0 :(得分:0)
我会尝试将所有内容保存在一个系统中。你真的需要Redis来管理密钥集吗?经常访问的数据库表应该主要缓存在内存中。