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