作者回复: 这个单文档事务叫法背后的逻辑: 关系型里面,用户表和用户电话是分开在两张表。当你需要新增一个新用户,你需要: insert into USER insert into PHONE 这两个DML需要放在事务范围内,保证两条数据(其实是一条,用户数据)要么一起成功写入,要么回滚。 在MongoDB里面,类似的操作变成了一个单文档操作: db.user.insert({ name: "TJ",phone: ["1234"]}) 这个操作里面其实相当于做了两个事情:1) 添加用户 2) 添加电话号码。这两个事情是有原子事务性的-要么一起成功,要么一起失败。 这个是mongo单文档事务的由来。
作者回复: 事务性有ACID四个属性,你上面讲的是ACID里面的I, Isolation。Isolation隔离性关注的就是跟读相关的事情。 你说的增删改事务,多半是和A相关,Atomicity,原子性。一起提交,或者全部回滚。
作者回复: 这个反馈可以去jira.mongodb.org 去提一个Issue,属于产品建议。
作者回复: 你要问我,肯定是了。从CRUD操作来说,JSON 数据库更加方便。支持事务以后,现在MongoDB剩下的就是 做BI分析了这一块可能还不算太强。
作者回复: 会产生日志。日志里有个特殊字段会标记出来是来自于chunk migration
作者回复: 这个是设计如此,也是合理的。一个事务中,每个操作应用一样的隔离级别。
作者回复: 你这个不用分布式事务吧,用 findAndModify就可以实现了。
作者回复: 不太明白你的问题,可以详细描述一些么