基本概念
OLTP vs OLAP
1、基本含义不同:OLTP,即联机事务处理(on-line transaction processing)是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改、查,比如在银行存取一笔款,就是一个事务交易。OLAP,即联机分析处理(On-Line Analytical Processing),是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统。
2、实时性要求不同:OLTP实时性要求高,OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。OLAP的实时性要求不是很高,很多应用顶多是每天更新一下数据。
3、数据量不同:OLTP数据量不是很大,一般只读/写数十条记录,处理简单的事务。OLAP数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大。
4、用户和系统的面向性不同:OLTP是面向顾客的,用于事务和查询处理。OLAP是面向市场的,用于数据分析。
5、数据库设计不同:OLTP采用实体-联系ER模型和面向应用的数据库设计。OLAP采用星型或雪花模型和面向主题的数据库设计。
OLTP面对的问题
硬件失效 – 宕机/停电 – 硬件损坏 – 灾难
软件错误 – Bug – 恶意攻击
并发问题 – 多个用户同时更新数据出现异常
ACID
原子性(Atomicity):要么未开始,要么全部完成,不存在中间状态
一致性(Consistency):事务的执行不会破坏数据的正确性,即符合约束。
隔离性(Isolation):多个事务不会互相破坏。常见于并发问题。
持久性(Durability):一旦提交成功,对数据的修改不会丢失
undolog、redolog、binlog
Undo日志的规则
(1) 每一次对数据的改动都需要记录日志。
(2) 日志记录必须在数据之前到达磁盘。(write ahead logging: WAL)
(3) 事务结束之前,所有的数据和日志必须到达磁盘。(保证持久性)
例如:update column A value = value * 2; update column B value = value * 2;
Redo日志的规则
(1) 每一次对数据的改动都需要记录日志。
(2) 事务提交之前所有的日志必须到达磁盘。(write ahead logging: WAL)
(3) 事务提交之后才能将数据写到磁盘。
(4) 数据到达磁盘后,需在日志中记录END。
总结
undolog 用来保证事务回滚和MVCC功能。
redolog 用来保证事务的持久性、在系统崩溃的时候能保证数据恢复。
binlog 用于记录数据库执行的写入性操作(不包括查询)信息的二进制日志。是 MySQL的逻辑日志。