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 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

4

1 回答 1

0

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

于 2012-11-18T17:00:01.663 回答