为什么我的CouchDB数据库增长如此之快?

时间:2010-05-27 12:42:33

标签: size couchdb

我想知道为什么我的CouchDB数据库变得越来越快,所以我写了一点test script。此脚本将CouchDB文档的属性更改1200次,并在每次更改后获取数据库的大小。执行这1200个写入步骤后,数据库正在执行compaction step并再次测量db大小。最后,脚本将数据库大小与修订号进行对比。基准测试运行两次:

  • 第一次使用默认的文档修订号(= 1000)(_revs_limit)。
  • 第二次将文档修订数设置为1。

第一次运行产生以下情节

first run http://i46.tinypic.com/xayydw.png

第二次运行产生这个情节

second run http://i50.tinypic.com/2l92l8w.png

对我而言,这是一个非常意想不到的行为。在第一次运行中,我预计会出现线性增长,因为每次更改都会产生新版本。当达到1000个修订版时,大小值应该是不变的,因为旧的修订版被丢弃。压实后尺寸应显着下降。

在第二次运行中,第一个修订版应该会产生某个数据库大小,然后在下面的写入步骤中保留,因为每个新修订版都会导致删除前一个修订版。

我能理解管理变更是否需要一些开销,但这种增长行为对我来说似乎很奇怪。任何人都可以解释这种现象或纠正导致错误期望的假设吗?

1 个答案:

答案 0 :(得分:4)

首先,CouchDB甚至会为已删除的修订版本(只是ID和修订标识符)保存一些信息,因为它需要将其用于复制目的。

其次,由于数据在磁盘上的保存方式(参见WikiPedia),一次插入一个文档是次优的,这可以解释第一个图中超线性增长。