【问题标题】:How does Couchdb store duplicated attachments?Couchdb 如何存储重复的附件?
【发布时间】:2013-04-30 12:37:26
【问题描述】:

我有一个 CouchDB 数据库,主要存储文档附件。

文件在 db 中排序,URL 结构如下: /db-name/numeric-file-id/official-human-readable-file-name.ext

一份文件总是只有一份附件。 今天我计算了所有文件的 md5 总和,似乎其中许多是重复的。

我想知道 couchdb 是否知道重复的附件并在内部仅存储某种指向文件的指针,并跟踪引用计数,或者只是按原样存储每个附件。

我的意思是,如果我把 5 个相同的 100MB 文件作为附件,数据库会使用 100MB 还是 500MB?

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    我在 CouchDB 文档中也找不到这个问题的直接答案,所以我设计了一个简单的经验测试(使用 CouchDB 1.4):

    实验:

    我逐渐添加了 3 个文档,每个文档都有几个大(多 MB)附件,这些附件在文档之间是相同的。然后,我在每次插入文档后检查了生成的 db.couch 文件的磁盘大小。

    结果:

    db.couch 文件从 8MB 增加到 16MB,然后分别为第 1 个、第 2 个和第 3 个文档插入增加了 24MB。因此,CouchDB 确实 似乎在对不同文档上的相同附件进行重复数据删除。添加三个文档后手动压缩数据库对文件大小没有影响,因此某些后台维护过程也不太可能注意到/修复此问题。

    鉴于以下三个观察结果,缺少附件重复数据删除是一个奇怪的遗漏:

    1. 作者非常关心如何有效处理大型附件,因此他们添加了对存储附件的自动 gzip 压缩(对于那些具有指示某种文本内容的 MIME 类型的附件。)

    2. 添加附件会导致计算 MD5 摘要并将其与附件的元数据一起存储。

    3. CouchDB 似乎确实对仍保存在数据库中的 相同 文档的多个版本之间共享的相同附件进行了重复数据删除(可能是 MD5 摘要的一种用途)。

    考虑到这些因素,令人惊讶的是,CouchDB 在这方面并没有更智能,因为这将是一项有价值且(可能)直接的优化。

    【讨论】:

      猜你喜欢
      • 2012-01-08
      • 2011-02-19
      • 2012-12-01
      • 2012-12-04
      • 2016-05-18
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多