更新时间:2022-06-21 GMT+08:00

写入/更新命令

  • 用户做了大量写入/更新操作后,实际数据量可能没有多大变化,但磁盘空间使用量增加了。是因为无论是写入、更新还是删除,以及索引插入和删除等操作,在后台实际上都会转成写入。因为底层的存储引擎(WiredTiger和RocksDB)采用都是appendOnly机制。只有当存储引擎内部数据状态满足一定条件后,会触发内部的compaction操作,进行数据压缩,进而释放磁盘空间。
  • 写入/更新操作会涉及到备节点同步,可以指定writeConcern级别。详情请参见Write Concern

注意事项

  • update和upsert:upsert内部会先做一次查询,如果查询不存在则插入,否则执行update。如果业务上场景可以进行相关记录,则避免使用upsert命令,建议直接使用update或insert。
  • update也需要匹配索引。
    • 避免COLLSCAN全表扫描。
    • 查询条件和索引字段匹配有顺序性。
  • insert/update命令中涉及的文档,最大不能超过16MB。