这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天.
今天老师主要讲解了关系型数据库的由来,并且以抖音红包的例子将ACID进行了深入理解。
当抖音抢到红包后会做两步操作,第一步更新抖音余额,将抖音的金额扣除,第二步增加自身的金额。这两步就构成了一个完整的事务。
首先事务具有原子性,即这两步操作看成一整个单元,要么都执行,要么都不执行,不可中断只执行一部分,否则可能抖音的钱扣除然而自身的钱没增加。
一致性即每个操作都是合法的,若抖音总共就0.5亿则不可减为-0.5亿,此状态无效,账户从一个有效的状态转化为另一个有效的状态。
隔离性即事务之间不可相互影响,若同样抖音与快手向用户转账1个亿,则可能会执行两边更新操作,虽然操作语句可能相同,但是必须都执行,不可相互影响。
持久性即当语句执行后需要完整的写入磁盘进行持久更换,若操作一半后服务器崩溃,可能用户还未收到余额然后数据库进行了回滚操作,所以最后用户并没有收到余额。只有当数据写入磁盘才能算一次完整事务发生。
在计算机开发之前都是以人工管理的方式存储数据,1956年IBM发布了第一个磁盘驱动器,所以开始以文件系统管理方式进行数据存储,这样存储数据会使得数据更加紧密。在数据管理系统DBMS时代,从最开始的网状模型到层次模型,再到后来的关系模型。关系模型是二元组表,列之间的关系交互。
每个数据管理方式都有对应的优势与劣势。现在主流的就是sql数据关系型数据库。
可以看到一条完整的sql数据从路由发送开始到解析器解析,类似于之前学的规则引擎解析,然后进行优化器优化,优化器类似于打车推荐路线,会优先根据适当规则选择用户需要的最优路线,最后执行。老师讲的非常细致,从解析,优化到执行。
最后讲解了关于引擎,存储与锁的概念,需要更具体的研究,老师以实战分析结束,整体讲课十分受益,以生活实际讲解到sql语句的产生,到理解事务,锁等概念,后期还需要更好的学习理解。