因为 MongoDB 天然支持集群,所以事务的配置参数主要涉及集群,即 CAP 理论的取舍。
w
j
w
取值
{"writeConcern": { "w": 0}}
{"writeConcern": { "w": "majority"}}
j
取值
{"writeConcern": { "j": true}}
可通过命令的控制,实现 MongoDB 集群节点之间的数据一致性,以此来快速验证事务。
db.fsyncLock()
db.fsyncUnlock()
conf = rs.conf()
conf.members[0].tags = { "<tag>": "<string>", ...}
conf.members[0].tags = { "tag1": "string1", "tag2": "string2"}
rs.reconfig(conf)
rs.conf()
因为 MongoDB 的集群特点,所以其读取数据也有一些集群特性的配置。
主要分为两部分:
db.order.find({}).readPref("secondaryPreferred", [{"region": "West"}])
cursor.readPref(mode, tagSet)
db.order.find({}).readPref("secondary", [{"tag", "read"}])
replication:
enableMajorityReadConcern: true
cursor.cursor.readConcern(<level>)
db.order.find({}).readConcern("majority")
session = db.getSession()
session.startTransaction()
demo = session.getDatabase("demo")
session.commitTransaction()
session.abortTransaction()
多文档和 writeConcern
// 获取 Session
ClientSession clientSession = mongoClient.startSession();
// 开启事务
clientSession.startTransaction();
// 命令
// 提交事务
clientSession.commitTransaction();
// 放弃事务
clientSession.abortTransaction();
@Bean
public MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
return new MongoTransactionManager(factory);
}