MongoDB 从4.0 版本开始 副本集支持多文档事务,4.2 版本开始分片集群也支持多文档事务。单个集合的单个文档事务 在 1.x 就支持。
以下是跟 mongo 事务相关的一些概念:
1. Write Concern
参数格式: { w: <value>, j: <boolean>, wtimeout: <number> }
w:请求确认写操作已复制到指定数量的 mongod 实例或具有指定标签的 mongod 实例
j: 请求确认写操作已写入磁盘日志
wtimeout: 指定一个写入超时时间,以防止写操作无期限的阻塞
writeConcern 决定了一个写操作落到多少个 集群节点 上才算成功(无论是分片集群还是副本集)。writeConcern w参数 的取值包括:
- 0: 客户端发起写操作, primary 不关心 secondary 节点是否写入成功,只要 primary 写入成功则直接响应客户端;
- 1~N: 客户端发起写操作,需要被复制到指定节点数才算成功;
- majority: 写操作需要被复制到大多数节点(超过半数)才算成功。
发起写操作的程序将阻塞到写操作到达指定的节点数为止。
如果你是集群模式,要保证数据写入成功,显然这个参数是很关键的。
2. Read Concern
3. Read Preference
4. on-disk journal
5. MongoDB 两阶段提交
6. MongoDB 日志刷盘刷盘的时机