我想知道为什么我的CouchDB数据库变得越来越快,所以我写了一点test script。此脚本将CouchDB文档的属性更改1200次,并在每次更改后获取数据库的大小。执行这1200个写入步骤后,数据库正在执行compaction step并再次测量db大小。最后,脚本将数据库大小与修订号进行对比。基准测试运行两次:
第一次运行产生以下情节
first run http://i46.tinypic.com/xayydw.png
第二次运行产生这个情节
second run http://i50.tinypic.com/2l92l8w.png
对我而言,这是一个非常意想不到的行为。在第一次运行中,我预计会出现线性增长,因为每次更改都会产生新版本。当达到1000个修订版时,大小值应该是不变的,因为旧的修订版被丢弃。压实后尺寸应显着下降。
在第二次运行中,第一个修订版应该会产生某个数据库大小,然后在下面的写入步骤中保留,因为每个新修订版都会导致删除前一个修订版。
我能理解管理变更是否需要一些开销,但这种增长行为对我来说似乎很奇怪。任何人都可以解释这种现象或纠正导致错误期望的假设吗?
答案 0 :(得分:4)
首先,CouchDB甚至会为已删除的修订版本(只是ID和修订标识符)保存一些信息,因为它需要将其用于复制目的。
其次,由于数据在磁盘上的保存方式(参见WikiPedia),一次插入一个文档是次优的,这可以解释第一个图中超线性增长。