0

如果您使用的是 MMAPv1 存储引擎,则如果文档大小增加,更新可能会导致文档在磁盘上移动。但是,在使用 WiredTiger 存储引擎时,增大或缩小文档是否仍会导致性能问题?如果是这样,推荐的处理方法是什么?

触发此问题的集合包含大小可能在x kB3x kB之间变化的文档。

4

1 回答 1

1

我刚刚阅读了 MongoDB 网站上的 WiredTiger 文档:https ://docs.mongodb.com/manual/core/wiredtiger/

它包含有关 WiredTiger 如何工作的一些有价值的信息(阅读文档中的所有句子):

WiredTiger 使用多版本并发控制 (MVCC)。在操作开始时,WiredTiger 向事务提供数据的时间点快照。快照呈现内存中数据的一致视图。

写入磁盘时,WiredTiger 将所有数据写入快照 [...]

MongoDB 配置 WiredTiger 以每隔 60 秒或 2 GB 的日志数据创建检查点(即将快照数据写入磁盘)。

因此,WiredTiger 将所有操作(插入、更新、删除)写入快照日志,然后将其保存到 60 秒或 2Gb 的磁盘上。当然,如果它崩溃,快照将在启动时被读取。它接近事件日志的工作方式。因此,由于它没有在适当的位置替换数据(它只是在快照中写入新版本的数据,然后检查点进程将在稍后替换旧版本),因此将文档替换为更大的文档不会产生惩罚成本。

当然,如果您想确定,请对其进行测试,因为这是 100% 确定的唯一方法。

于 2016-08-25T15:50:49.097 回答