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

Jak*_*old 4 couchdb

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

我不是删除或修改任何数据,我所做的基本上是插入新记录,紧凑,大小下降.

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

Jas*_*ith 9

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

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

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

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

  • 我的记录是将300GB文件压缩到6MB.(它对同一些文档的更新率非常高.) (4认同)