进入MongoDB中文手册(4.2版本)目录
1 原子性
在MongoDB中,写操作在单个文档级别上是原子的,即使在单个文档操作修改多个嵌入式文档。
2 多文档事务
当单个写入操作(例如 db.collection.updateMany())修改多个文档时,每个文档的修改都是原子的,但整个操作不是原子的。
当执行多文档写操作时,无论是通过单个写操作还是通过多个写操作,其他操作都可能会交错执行。
当对多个文档(在单个或多个集合中)进行读写需要原子性操作的情况下,MongoDB支持多文档事务:
- 在版本4.0中,MongoDB支持副本集上的多文档事务。
- 在4.2版中,MongoDB引入了分布式事务,它增加了对分片群集上多文档事务的支持,并合并了对副本集上多文档事务的现有支持。
有关MongoDB中事务的详细信息,请参阅事务页面。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将是一直最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见生产注意事项。
3 并发控制
并发控制允许多个应用程序并发运行,而不会导致数据不一致或冲突。
一种方法是在只能具有唯一值的字段上创建唯一索引。这样可以防止插入或更新创建重复数据。在多个字段上创建唯一索引可以使字段值的组合具有唯一性。有关用例的示例,请参见update()和Unique Index以及findAndModify()和Unique Index。
另一种方法是在查询语句中为写操作指定字段的当前的期望值。
也可以看看: