【问题标题】:Database to store compressed files存储压缩文件的数据库
【发布时间】: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

【问题讨论】:

  • 您也许可以使用新的(在 redis 2.6 中)MIGRATE 命令将这些密钥迁移(即移动)到另一个数据库,然后 SAVE 该数据库。

标签: mysql database redis storage bigdata


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2021-10-02
    • 1970-01-01
    • 2019-04-06
    • 2013-01-05
    相关资源
    最近更新 更多