对mongodb 3.2(wiredtiger)上的文档进行的任何更新是否始终重写磁盘上的完整文档,或者可以进行部分更新。
例如,$ inc操作确实改变了文档BSON结构。如果该字段已经存在,那么整数的4个字节保持在相同的位置,我们可以只更新4个字节。
关于哪个规则,可以在适当的位置编辑带有wiretiger的更新?
由于
答案 0 :(得分:1)
注意为了简洁和易于理解,简化了以下内容。
WiredTiger有一个写时复制范例。另一方面,文档永远不会分散。因此,如果你修改它,它就会被复制。
但是:文档会经常同步到磁盘以创建快照。默认情况下,每隔60秒,在此期间耐用性由提前记录提供。 WiredTiger在进行光盘同步方面效率很高。
因此,在两个快照之间,您的$inc
操作将写入日志并应用于文档的内存中表示。只有在创建新快照时,才会复制文档。
所以基本上每个对文档的编辑都已到位,并且只有在创建快照期间才能完成繁重的工作。