我在 CouchDB 文档中也找不到这个问题的直接答案,所以我设计了一个简单的经验测试(使用 CouchDB 1.4):
实验:
我逐渐添加了 3 个文档,每个文档都有几个在文档之间相同的大(多 MB)附件。然后,我在每次插入文档后检查了生成的 db.couch 文件的磁盘大小。
结果:
db.couch 文件从 8MB 增加到 16MB,然后分别为第 1 个、第 2 个和第 3 个文档插入增加了 24MB。因此,CouchDB 似乎不会对不同文档上的相同附件进行重复数据删除。添加三个文档后手动压缩数据库对文件大小没有影响,因此某些后台维护过程也不太可能注意到/修复此问题。
鉴于以下三个观察结果,缺少附件重复数据删除是一个奇怪的遗漏:
作者非常关心如何有效地处理大型附件,因此他们添加了对存储附件的自动 gzip 压缩(对于那些具有指示某种文本内容的 MIME 类型的附件。)
添加附件会导致计算 MD5 摘要并将其与附件的元数据一起存储。
CouchDB 似乎确实对仍在数据库中的同一文档的多个版本之间共享的相同附件进行了重复数据删除(可能是 MD5 摘要的一种用途)。
考虑到这些因素,令人惊讶的是,CouchDB 在这方面并没有更智能,因为这将是一个有价值且(可能)直接的优化。