数据库知识点
ACID
原子性:事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部回滚。
一致性:数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。
隔离性:一个事务所做的修改在最终提交以前,对其他事务是不可见的。
持久性:一旦事务提交,则其所做的修改将永远保存到数据库中。其实系统发生崩溃,事务执行的结果也不能丢失。
隔离级别
未提交读,提交读,可重复读,可串行化。
MySQL
存储引擎
InnoDB
默认事务型存储引擎,实现了四个标准的隔离级别,默认级别为可重复读。在可重复读隔离级别下,通过MVCC+间隙锁防止幻影读。
主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升。
内部做了很多优化,从磁盘读取数据时采用的可预测性读,能够加快读操作并且自动创建自适应哈希索引,能够加速插入操作的插入缓冲区。
支持真正的在线热备份,
索引(B+树)
1.数据结构
B tree指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。
B+ Tree 是基于B Tree 和叶子节点顺序访问指针进行实现,它具有B Tree的平衡性,并且通过顺序访问指针来提高区间查询的性能。
在B+ Tree中,一个节点中的key从左到右非递减排列,如果某个指针的左右相邻key分别是$key_i$和$key_{i+1}$,且不为null,则该指针指向节点的所有key大于等于$key_i$且小于等于$key_{i+1}$
2.操作
进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。
插入删除操作记录会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。
3.与红黑树的比较
红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用B+ Tree作为主要有以下两个原因。
更少的查找次数
平衡树查找操作的时间复杂度等于树高h,而树高大致为$O(h)=O(log_{d}N)$,其中d为每个节点的出度。
红黑树的出度为2,而B+ Tree的出度一般都非常大,所以红黑书的树高h很明显比B+ Tree大非常多,检索的次数也就更多。
利用计算机预读特性
为了减少磁盘I/O,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的旋转时间,因此速度会非常快。
操作系统一般将内存和磁盘分割成固态大小的块,没一块称为一页,内存和磁盘以页为单位减缓数据。数据库系统将索引的一个节点的大小设置为页的大小,是的一次I/O就能完全载入一个节点,并且可以利用预读特性,相邻的节点也能够被预先载入。
MySQL-主从复制与读写分离
主从复制