我们使用 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 文件。IE
在时间 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 文件应该只包含:
键 5、键 14
然后应该从redis中删除上述键。
那可能吗?如果重要,我正在使用python。
您对这项任务有其他想法吗?另一个 DBMS,直接存储到文件系统等。
PS 忘了提,总共会有大约 15.000.000 个密钥,所以会有 15.000.000 * 3 个文件。
我也使用带有 ext3 文件系统的 Linux