MySQL001:知道数据库的四大特性,但你知道原理吗
相信各位铁铁,在面试中,经常会被问到的一个问题就是:“请描述一下数据库的四大特性有哪些”!
大多数工程师几乎脱口而出的就是ACID,请问如果你也这么回答,那你和别人的差距在哪里呢?你又怎么能在众多候选人中脱颖而出呢?
今天就给大家带来不一样的答法,做到:知其然,知其所以然。
首先我们要了解一些基础知识点:
MVCC
MVCC全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
MVCC在MySQL InnoDB中主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使读写冲突时,也能做到不加锁,非阻塞并发读。
undolog
undolog被称之为回滚日志,表示在进行insert,delete,update操作的时候产生的方便回滚的日志。
当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,并且在事务提交之后可以被立刻丢弃。
redolog
在完成数据的修改之后,脏页刷入磁盘之前写入重做日志缓冲区。即先修改,再写入。
脏页:内存中与磁盘上不一致数据。
原子性(atomicity)
原子性是指事务包含的所有操作,要么全部成功,要么全部失败回滚。失败回滚的操作事务,将不能对事务有任何影响。
那它究竟是如何实现的呢?
答:MVCC+undolog
MVCC就像高速公路的各个车道,非机动车走属于你的车道;60~90码的走你的慢车道,130~160码得走你的快车道……
undolog就像你的行车记录仪
你在哪个车道出的问题,你就在哪个车道上解决,不能影响了其他车道的正常运行;出现了交通事故,根据双方的行车记录仪,该返厂的返厂(相当于回滚),该维修的维修。
一致性(consistency)
一致性是指事务必须使数据库从一个一致状态变换到另一个一致状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
一致性,是其他三个的组合保证了数据的正确性。
隔离性(isolation)
隔离性是当多个用户并发访问数据库时,比如同时操作同一张表,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
实现原理:锁+MVCC
条条大路通罗马:你从河南去上海,另一个人从北京去上海,各自走各自的路线,但进入上海时要走同一个收费站,各自排队收费,之后再各自去各自的目的地。各自的路线就相当MVCC,锁就是共同经过的相同路线或相同的收费站。
持久性(durability)
持久性指事务的操作,一旦提交,对于数据库中数据的改变是永久的,即使数据库发生故障也不能丢失已提交事务所完成的改变。
redolog:可以简单理解为就是持久化的过程,将缓存redo log buffer写入磁盘。
做一道数据题:3+2= ;经过心算之后,等于5,填入答题卡。
本章到这里就告一段落了,有一些内容便于大家理解,举了些生活中的例子,但他远远没有那么简单的啊。
喜欢的朋友,赶快收藏,转发吧。