文章目录
一、数据库与数据仓库的区别
1.1、区别
1.2、ACID内容
二、原子性(Atomicity)
三、持久性(Durability)
四、隔离性(Isolation)
1、锁机制
2、脏读、不可重复读和幻读
2、事务隔离级别
五、一致性(Consistency)
总结
一、数据库与数据仓库的区别
1.1、区别
数据库:主要用于事务处理,即OLTP(On-Line Transaction Processing)【联机事务处理】,也就是我们常用的面向业务的增删改查操作。常用的数据库有Mysql,Oracle,PostgreSQL。
数据仓库:主要用于数据分析,即OLAP(On-Line Analytical Processing)【联机分析处理】,供上层决策,常见于一些查询性的统计数据。常见的数仓有Greenplum,Hive。基于MYISAM存储引擎的MySQL也是可以用来做数据仓库的。
- 基本含义不同:OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改、查,比如在银行存取一笔款,就是一个事务交易。OLAP即联机分析处理,是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统。
- 实时性要求不同:OLTP实时性要求高,OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。OLAP的实时性要求不是很高,很多应用顶多是每天更新一下数据。
- 数据量不同:OLTP数据量不是很大,一般只读/写数十条记录,处理简单的事务。OLAP数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大。
- 用户和系统的面向性不同:OLTP是面向顾客的,用于事务和查询处理。OLAP是面向市场的,用于数据分析。
- 数据库设计不同:OLTP采用实体-联系ER模型和面向应用的数据库设计。OLAP采用星型或雪花模型和面向主题的数据库设计。
1.2、ACID内容
ACID是衡量事务的四个特性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
二、原子性(Atomicity)
原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做
数据库中:如果事务中一个sql语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态
(Ps:上面只是举个例子,要注意的是MySQL的事务并不支持原子性,在MySQL中,如果事务中的一条sql无法执行,它会将这一条sql报错,并继续执行接下来的sql,且已执行的sql也不回滚,除非我们主动使用逻辑判断要求报错时执行回滚,否则MySQL的事务本身是不会回滚的)
三、持久性(Durability)
持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
简单理解:就是数据的持久化
四、隔离性(Isolation)
与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
通常使用锁机制来保证事务的隔离性
1、锁机制
MySQL数据库中:MyIsam存储引擎只支持表锁,InnoDB存储引擎同时支持表锁和行锁,出于性能考虑,绝大多数情况下使用的都是行锁。
2、脏读、不可重复读和幻读
若不保证事务的隔离性,则有可能会出现数据的【脏读、不可重复读和幻读】
(1)脏读:当前事务(A)中可以读到其他事务(B)未提交的数据(脏数据),这种现象是脏读
举例如下(以账户余额表为例):
(2)不可重复读:在事务A中先后两次读取同一个数据,两次读取的结果不一样,这种现象称为不可重复读
脏读与不可重复读的区别在于:前者读到的是其他事务未提交的数据,后者读到的是其他事务已提交的数据。举例如下:
(3)幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读
不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了。举例如下:
2、事务隔离级别
SQL标准中定义了四种隔离级别,并规定了每种隔离级别下上述几个问题是否存在。一般来说,隔离级别越低,系统开销越低,可支持的并发越高,但隔离性也越差。隔离级别与读问题的关系如下:
在实际应用中,读未提交在并发时会导致很多问题,而性能相对于其他隔离级别提高却很有限,因此使用较少。可串行化强制事务串行,并发效率很低,只有当对数据一致性要求极高且可以接受没有并发时使用,因此使用也较少。因此在大多数数据库系统中,默认的隔离级别是读已提交(如Oracle)或可重复读
另外,InnoDB默认的隔离级别是【可重复读】,但是InnoDB通过MVCC(MVCC全称Multi-Version Concurrency Control,即多版本的并发控制协议)避免了幻读问题
五、一致性(Consistency)
MySQL中:一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。
数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)
简单理解:就是事务执行前后,数据的改变都是合法,且各方数据都是一致的
另外,我们应当理解到,事务的目的就是为了数据一致性
如何实现事务的一致性:
1:保证事务的原子性、持久性和隔离性
2:数据库本身提供保障,完善其完整性约束
3:应用层面进行保障,例如如果转账操作只扣除转账者的余额,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致
总结
以上就是对数据仓库与数据库的简单介绍,希望对初学者有所帮助。
最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。