写入操作性能
索引
集合中的每个索引都会在写入操作的性能上增加一些开销。
对于每个insert
或 delete
写操作在集合上,MongoDB 会将相应的文档键插入或从目标集合的每个索引中删除。更新操作可能只更新受影响的键的集合上的索引子集。
注意
MongoDB 仅在写入操作涉及的文档包含在索引中时,才会更新稀疏索引或部分索引。
一般来说,索引为“读取操作”提供的性能提升值得写入时的惩罚。然而,为了尽可能优化写入性能,在创建新索引时请谨慎,并评估现有索引以确保您的查询确实使用了这些索引。
日志记录
为了在发生崩溃时提供持久性,MongoDB会先将内存中的更改写入磁盘上的日志,从而使用预写日志。MongoDB首先将内存中的更改写入磁盘日志文件。如果在将更改提交到数据文件之前,MongoDB意外终止或遇到错误,MongoDB可以使用日志文件将写操作应用到数据文件。
尽管日志提供的持久性保证通常超过了额外写操作的性能成本,但请考虑日志和性能之间的以下交互
如果日志和数据文件位于同一块设备上,数据文件和日志可能需要争夺有限的I/O资源。将日志移动到单独的设备上可能会增加写操作的能力。
日志写入之间的时间间隔可以通过
commitIntervalMs
运行时选项进行配置。减少日志提交之间的时间间隔会增加写操作的数量,这可能会限制MongoDB的写操作能力。增加日志提交之间的时间可能会减少写操作的总数,但同时也增加了在发生故障时日志可能无法记录写操作的风险。
有关日志记录的更多信息,请参阅日志记录。