首页 > 代码库 > Mongdb事务和原子操作
Mongdb事务和原子操作
首先,原则上说Mongdb没有事务的概念。
事务有ACID的概念,比如原子性,一个事务要么全部成功,要么全部失败。
如,考虑一个转账的业务,从A转账100到B,将分为两步:
A = A - 100;
B = B + 100;
在Mongdb中,如果A = A - 100;执行完,将会直接入库生效,没有回滚段的概念,所以如果此时B = B + 100;出现了问题,是不能回滚上一步A的操作的。所以说,Mongdb是没有原子性的。
然后说一致性,简单的来说读一致性,Mongdb都无法保证。Mongdb为了保证读取到的数据是不会回滚的(相对于Oracle来说,就是未提交的数据,保证没有脏读),已经花了很大的心思,在最新的 3.4版本才实现,而且是建立在Mongdb的查询都是单个集合的基础之上的。更别说要去保证读取的数据要是查询开始那个时间点的数据了。
这并不是说Mongdb比较笨拙,不如Oracle,是因为Mongdb的架构给我们带来了可以水平扩展的优势,就损失了事务方面的功能。
其实在Mongdb中,对于单个语句,是可以实现原子性的。
这里的单个语句,对Mongdb来说,就是针对单个collection的update和delete操作。比如,如果批量update 100条数据,在第99条出现了问题,是可以回滚的。但是这个并不是事务,这个是一个update语句的基本功能,如果执行一个update语句,你都不能确定能不能都执行成功,那么这个数据库还怎么用呢。
Mongdb事务和原子操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。