growing/shrinking 文档是否会导致 WiredTiger 出现性能问题
Can growing/shrinking documents cause performance issues in WiredTiger
如果您使用的是 MMAPv1 存储引擎,则更新可能会导致文档在文件大小增加时在磁盘上移动。但是,在使用 WiredTiger 存储引擎时,增大或缩小文档是否仍然会导致性能问题?如果是这样,推荐的处理方法是什么?
触发此问题的集合包含大小可能在 x kB 和 3x kB 之间变化的文档。
我刚刚阅读了 MongoDB 站点上的 WiredTiger 文档:https://docs.mongodb.com/manual/core/wiredtiger/
它包含一些关于 WiredTiger 如何工作的有价值的信息(阅读文档中的所有句子):
WiredTiger uses MultiVersion Concurrency Control (MVCC). At the start of an operation, WiredTiger provides a point-in-time snapshot of
the data to the transaction. A snapshot presents a consistent view of
the in-memory data.
When writing to disk, WiredTiger writes all the data in a snapshot [...]
MongoDB configures WiredTiger to create checkpoints (i.e. write the
snapshot data to disk) at intervals of 60 seconds or 2 gigabytes of
journal data.
因此,WiredTiger 将所有操作(插入、更新、删除)写入快照日志,然后每 60 秒或 2Gb 持久保存到磁盘。当然,如果它崩溃了,快照将在启动时被读取。
它接近于事件日志的工作方式。因此,由于它没有就地替换数据(它只是在快照中写入新版本的数据,然后检查点进程将在以后替换旧版本),用更大的文档替换文档不会有任何惩罚成本。
当然,如果您想确定,请进行测试,因为这是 100% 确定的唯一方法。
如果您使用的是 MMAPv1 存储引擎,则更新可能会导致文档在文件大小增加时在磁盘上移动。但是,在使用 WiredTiger 存储引擎时,增大或缩小文档是否仍然会导致性能问题?如果是这样,推荐的处理方法是什么?
触发此问题的集合包含大小可能在 x kB 和 3x kB 之间变化的文档。
我刚刚阅读了 MongoDB 站点上的 WiredTiger 文档:https://docs.mongodb.com/manual/core/wiredtiger/
它包含一些关于 WiredTiger 如何工作的有价值的信息(阅读文档中的所有句子):
WiredTiger uses MultiVersion Concurrency Control (MVCC). At the start of an operation, WiredTiger provides a point-in-time snapshot of the data to the transaction. A snapshot presents a consistent view of the in-memory data.
When writing to disk, WiredTiger writes all the data in a snapshot [...]
MongoDB configures WiredTiger to create checkpoints (i.e. write the snapshot data to disk) at intervals of 60 seconds or 2 gigabytes of journal data.
因此,WiredTiger 将所有操作(插入、更新、删除)写入快照日志,然后每 60 秒或 2Gb 持久保存到磁盘。当然,如果它崩溃了,快照将在启动时被读取。 它接近于事件日志的工作方式。因此,由于它没有就地替换数据(它只是在快照中写入新版本的数据,然后检查点进程将在以后替换旧版本),用更大的文档替换文档不会有任何惩罚成本。
当然,如果您想确定,请进行测试,因为这是 100% 确定的唯一方法。