当我压缩CouchDB数据库时实际发生了什么?

时间:2012-03-19 10:31:17

标签: couchdb

我注意到,每次插入一些东西后我都会压缩我的CouchDB实例,大小会下降很多(有时甚至会下降到20%)。

我没有删除或修改任何数据,我所做的基本上都是插入新记录,紧凑,尺寸下降。

当我压缩数据库时实际发生了什么?它以某种方式压缩数据?或者是因为每个新记录都带有一些垃圾,后来被紧凑型文件删除了?

1 个答案:

答案 0 :(得分:9)

CouchDB使用仅附加文件格式。代码永远不会执行fseek(3)。从开头开始的.couch文件的任何截断片段都是有效的数据库文件。 (CouchDB从末尾向后扫描以找到其“标题”)。

每次进行更改时,此体系结构的成本都会写入大量重复数据。基本上,沙发将新数据写入文件的末尾,然后写入将数据合并到数据树中所需的所有元数据更新,并编写新的标头以永久地提交所有这些。

因此,您可以获得大量重复的元数据(内部b树节点等),更不用说在.couch文件中构建的旧文档数据了。再一次,这是为了支付绝不会覆盖任何数据的防弹技术。

压缩只扫描旧.couch文件中的相关数据,并仅将其写入新的.couch文件。 b树是平衡的,旧的文件不再存在了。这很干净。