+
95
-

微信云开发数据库怎么进行事务处理?

微信云开发数据库怎么进行事务处理?

网友回复

+
15
-

微信元开发数据库其实就是使用了mongodb,因此他的事务处理就是mongodb事务处理。

MongoDB 单文档原生支持原子性,也具备事务的特性,但是我们说起事务,通常是指在多文档中的实现,因此,MongoDB 在 4.0 版本支持了多文档事务,4.0 对应于复制集的多表、多行,后续又在 4.2 版本支持了分片集的多表、多行事务操作。 事务四大特性

原子性(Atomicity):事务必须是原子工作单元,对于其数据修改,要么全执行,要么全不执行。类似于 Redis 中我通常使用 Lua 脚本来实现多条命令操作的原子性。

一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态。

隔离性(Isolation):由并发事务所做的修改必须与任何其他并发事务所作的修改隔离(简而言之:一个事务执行过程中不应受其它事务影响)。

持久性(Durability):事务完成之后,对于系统的影响是永久性的。

Read Concern/Write Concern/Read Preference

在事务操作中会分别使用到 readConcern、writeConcern、readPreference 这几个选项,用于控制 Session 的行为,下面分别予以介绍。 事务和 Write Concern

事务使用事务级别的 writeConcern 来提交写操作,决定一个事务的写入成功与否要看 writeConcern 选项设置了几个节点,默认情况下为 1。 几个选项值:

w:0 设置为 0 无需关注写入成功与否。 w:1 ~ 任意节点数 自定义节点数设置,复制集中不得大于最大节点数。默认情况下为 1,表示写入到 Primary 节点就开始往客户端发送确认写入成功。 w:"majority" 大多数节点成功原则,例如一个复制集 3 个节点,2 个节点成功就认为本次写入成功。 w:"all" 所以节点都成功,才认为写入成功。 j:true 默认情况 j:false,写操作到达内存算作完成。如果设置为 j:true,写操作只有到达 journal 文件才算成功。

wtimeout: 写入超时实践

设置示例: writeConcern: { w:"majority" // 大多数原则 j:true, wtimeout: 5000, }

JavaScript 使用示例: db.user.insert({name: "Jack"}, {writeConcern: {w: "majority"}})

建议

对于重要数据可以应用 w:"majority" 设置,普通数据 w:1 设置则可以保证性能最佳,w 设置的节点数越多,等待的延迟也就越大,如果 w 等于总节点数,一旦其中某个节点出现故障就会导致整个写入失败,也是有风险的。 docs.mongodb.com/manual/reference/write-concern/?spm=a2c4e.10696291.0.0.68d519a4ob3Yya 事务和 Read ...

点击查看剩余70%

我知道答案,我要回答