数据库基础知识杂记

数据库相关知识总结

数据库:数据结构、存储引擎、

什么是存储引擎以及不同存储引擎特点 - wildfox - 博客园

事务隔离级别(根源:并发性操作数据库)

实现机制:

锁机制实现隔离级别

级别影响:

隔离级别低—>并发性高—>系统开销低

隔离级别:

Read Uncommitted—>Read Committed—>Repeatable Read—>Serializable

隔离级别的缺陷:

  1. 脏读:未提交事务的过程处理结果(可能会回滚)可以被其他事务读取
  2. 不可重复读:同一事务中,不同时刻读取同一条记录(由于其他事务提交所带来的更新),读取结果不一致;
  3. 幻读:
  4. 补充:不可重复读侧重于update操作,幻读侧重于数据的insert/delete;

不可重复读与幻读的区别在于:

一个是已存在的记录前后不一致,一个是一条记录从无到有!
一个是观察的是单条记录,一个是观察的多条记录!
1. Read Uncommitted:当前事务执行过程中可读取其他未提交事务的处理结果,导致“脏读”(其他事务回滚)、“不可重复度”(其他事务提交)和幻读();
2. Read Committed:当前事务执行过程中不可读取未提交事务的处理结果;因此,无脏读,但是,不可重复读以及幻读依旧存在;
3. Repeatable Read(MySQL默认):当前事务执行过程中不同时刻读取同一条记录,结果保持一致;因此,无脏读、不可重复读,但是,幻读依然存在;
4. Serializable:所有的事物以串行的方式执行,因此,无脏读、不可重复读以及幻读;

隔离级别的进阶——锁机制的升级

Read Uncommitted—>Read Committed—>Repeatable Read—>Serializable
无锁—>行锁—>表锁&MVCC—>事务锁(读是共享锁,改是独占锁,锁单位是表)

数据库的水平拆分和垂直拆分

何为数据切分?
通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上,以达到分散单台设备负载的效果。


何为垂直拆分?
按照业务的分类,将原来一个数据库中的多张数据表,分散到多个数据库中;


何为水平拆分?
按照数据表中的某一字段进行拆分,拆分后的多张数据表的表结构是一样的;比如一张用户表,按照用户注册时间字段进行拆分,可以将2016年注册的记录放到表1,将2017年注册的记录放到表2…


水平拆分和垂直拆分的对比:
垂直拆分简单,只需按照业务进行拆分即可,但是业务复杂的情况下,垂直拆分可能带来不同数据库中的表join;
水平拆分复杂,考虑的维度较多,是良好的数据库架构设计的必须考虑的关键点;


数据库的行存与列存

行存与列存的区别在于:对一张数据表中的数据的组织方式不同,行存是将每一条记录作为一个整体进行顺序存放,而列存就是将每一行记录的对应列作为一个整体进行顺序存放的;
由于行存和列存的数据组织方式不同,导致了它们的使用场景不同:


行存的优点在于:

  1. 每一条记录中所有的字段都是顺序存放在一起,带来了INSERT和UPDATE操作的便利;

行存的缺点在于:

  1. 每一次SELECT即使只需要其中的某几列,所有的数据也会被读取,造成了不必要的查询和性能损耗;

列存的优点在于:

  1. SELECT某些字段而不是整条记录时,可以保证只SELECT所需要的列;
  2. 任何一列都可以作为索引;
  3. 投影很高效;

列存的缺点在于:

  1. 每一条记录的不同字段分开存放,导致INSERT和UPDATE操作的不便;
  2. SELECT部分字段之后,需要对得到的结果进行重新组装;

几张图看懂列式存储 - CSDN博客

HybridDB For MySQL

设计思想:链路、计算以及存储分离,实现松耦合分布式架构关系型数据库;
核心架构:数据链路、控制链路、链路引擎、计算节点(SSD)、存储节点(HDD)、低成本硬件以及高性能硬件

猜你喜欢

转载自blog.csdn.net/boker_han/article/details/81432387