gpt4 book ai didi

couchdb - Couchdb 如何存储重复的附件?

转载 作者:行者123 更新时间:2023-12-02 22:04:54 27 4
gpt4 key购买 nike

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

文件存储在数据库中,URL 结构如下:/db-name/numeric-file-id/official-human-readable-file-name.ext

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

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

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

最佳答案

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

实验:

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

结果:

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

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

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

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

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

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

关于couchdb - Couchdb 如何存储重复的附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com