-
3.2
版本开始引入Read Concern,解决了脏读,支持Read Commit -
3.6
版本引入Session,支持多个请求共享上下文,为后续的事务支持做准备 -
4.0
支持多行事务,但4.0的事务只是个过渡的版本 -
4.2
开始支持多文档事务
1. Mongo的架构
复制集架构
这是最基本的分布式架构,有一个主节点和两个节点。
主节点一般负责写入的功能。用户往主节点中写入数据时,主节点会更新数据表,并将操作信息生成一条oplog,写入到日志文件中。用户可以通过指定writeConcern
来控制写入的行为。
从节点一般都只提供读功能,可以用于读写分离。从节点会定时轮询读取 oplog 日志,根据日志内容同步更新数据表,保持与主节点一致。更新完成后,在返回更新时间戳给到主节点。
2. Mongo事务
五种一致性级别
一致性级别 |
语义 |
---|---|
local |
从本地读取最新数据,但不保证该数据已被写入大多数副本集成员。数据可能会被回滚 |
available |
从本地读取最新数据,但不保证该数据已被写入大多数副本集成员。数据可能会被回滚 |
majority |
读取已经write majority 的数据。保证数据不会被回滚,但是不一定是本地的最新数据 |
linearizable |
读取已经write majority的数据,但会等待在读之前所有的write majarity确认 |
snapshot |
与关系型数据库中的快照隔离级别语义一致 |
2.1. write concern
要了解一致性,首先要了解数据是怎么写入的。MongoDB的write concern包含下面3个参数:
参数 |
含义 |
取值 |
---|---|---|
w |
写操作需要复制并应用到多少个副本集成员才能返回成功 |
0:不关心成功,立即返回 |
j |