这是我参与 第五届青训营 伴学笔记创作活动的第16天。
重点内容
本节课老师从抖音红包雨案例开始讲起,介绍了关系型数据库的一些基本概念,然后围绕核心技术进行讲解,最后结合字节跳动企业内部实践讲解如何应对线上业务的一些挑战。
ACID
先来聊聊关系型数据库的事务,离不开ACID四个特性——原子性、一致性、隔离性、持久性。
以转账这个案例来认识事务再合适不过了。
比如抖音红包雨抢红包,小明中了一个亿,按照规则,抖音发钱账户扣除一个亿,而小明账户增加一个亿。
原子性
但是如果抖音账户刚扣除一个亿的瞬间,服务器挂了......
小明账户上没有增加一个亿,也就是说,抖音账户上的一个亿不翼而飞......
但是我们希望整个转账入账操作要么全部发生,要么全部不发生,以防一个亿不翼而飞。
这就是原子性。
一致性
活动期间,抖音账户的钱一批批发出去,到了要给小明转一个亿的时候了,但是此时抖音账户只有0.5亿。
So?
如果转账操作成功进行,抖音账户变成-0.5个亿......
而小明账户上多了1个亿。
这平白无故多出来的0.5个亿由银行承担,银行肯定不干,反手就是一个举报......
所以我们需要确保每个操作都是合法的,在这里就是不能存在余额为负值的不合法情况,也不能说抖音转账0.5亿,而小明入账1亿,必须转账和入账的金额保持一致,这就是一致性。
隔离性
小明比较喜欢网上冲浪,不但在抖音抢了1个亿,还在快手抢了一个亿,所以小明最后账户金额应该是2亿对不对,但假如这时候转账同时进行,而且都以为小明余额为0,要将余额增加为1个亿。
So?
小明赚了又没完全赚。
我们希望多个操作同时进行的时候,两者操作互不干扰最后的结果,这就是隔离性。
持久性
转账操作进行完毕,小明账户如期增加了2个亿,但这时候数据还没写到磁盘上,服务器又挂了......
小明打开账户一看,金额果然没有增加。
小明哭晕到厕所......
我们希望操作进行完之后,数据能够持久保留下来,而不会因为服务器的突然宕机而丢失数据,这就是持久性。