暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase如何保证写的原子性

Ty3306 2023-01-06
446

OceanBase如何保证写的原子性
分布式数据库技术具体难在哪里呢?简单说,要想账头一分钱都不错,数据库要支持事务,事务拥有ACID原则,这四个字母分别代表:A原子性、C一致性、I隔离性、D持久性。

原子性:表示事务中的多个操作要么全部完成,要么全部失败,不会出现中间状态,例如A转给B100块钱,A账户扣除100块的同时,B账户必须增加100块钱。这两件事必须像一个原子一样紧紧抱在一起,决不允许“A已经扣钱,B还没加钱”的事情发生。
一致性:A转给B100块钱,转账完成的一瞬间,A瞬间再查询自己的最新余额,必须显示已经扣除100之后的金额,B必须瞬间查到已经加上100块之后的余额。所有的账目在任何一个时间切面必须完完全全对得上。
隔离性:表示多个并发事务之间不互相影响,A转给B100块钱,不能对C有任何影响。
持久性:表示事务一旦成功就不会丢失,A转给B100块钱,这笔转账一旦完成,就永远生效。
其中一致性是目的,原子性隔离性和持久化是手段,只要做好ACID中的AID,C自然就能满足。

由于数据散落在多台数据库服务器上,库作了拆分。分布式写最大的难度其实就在于保证ACID中的那个A——原子性。

举个例子,假设A给B转100块钱,由于是“分布式数据库”,A用户的账户数据存在A机器上,B用户的账户数据存在B机器上。

如果交易发生时,负责给A账户扣100块钱的A机器死机,没有扣成功,而负责给账户B加100块钱的B机器工作正常,加上了100——这就会造成支付宝损失100块。

反之,如果负责给A账户扣100块钱的A机器正常,已经扣掉100,而负责给账户B加100块钱的B机器死机,100块没加上,那么用户就会损失100——最后支付宝还要赔偿用户100块。


为了保证以上这两种尴尬的局面不发生,OceanBase 1.0 采用了整整一组技术,但最主要的是两个。

原文链接:https://blog.csdn.net/fuzhongmin05/article/details/118196626

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论