写入操作性能
索引
在集合上每个索引都会增加一定量的写入操作性能开销。
对于集合上的每个 insert
或delete
写入操作, MongoDB会从目标集合的每个索引中插入或删除相应的文档键。 update
操作可能会导致集合上索引子集合的更新,具体取决于受更新影响的键。
一般来说,索引为读操作提供的性能提升值得插入损失。但是,为了尽可能优化写性能,在创建新索引并评估现有索引时要小心,确保查询实际使用这些索引。
日记
为了在发生崩溃时提供耐久性,MongoDB 会提前将日志记录写入磁盘上的日志中。MongoDB 会先将内存中的更改写入磁盘上的日志文件。如果 MongoDB 在将更改提交到数据文件之前应终止或遇到错误,则 MongoDB 可以使用日志文件将写入操作应用于数据文件。
虽然日志提供的持久性保证通常超过额外写入操作的性能成本,但请注意日志与性能之间的以下相互作用:
如果日志和数据文件驻留在同一区块设备上,它们则可能必须争夺有限数量的可用 I/O 资源。将日志移至单独的设备可能会增大用于写入操作的容量。
如果应用程序指定包含
j option
的写关注,mongod
将缩短日志写入之间的持续时间,这可能会增加整体写入负载。可以使用
commitIntervalMs
运行时选项配置日志写入之间的持续时间。缩短日志提交之间的持续时间会增加写操作的数量,这会限制 MongoDB 的写操作容量。增加日志提交之间的时间量可能会减少写操作的总数,但也会增加在发生故障时日志不记录写操作的概率。
有关日志的更多信息,请参阅日志。