CMU Advanced DB 课程笔记#2:数据库工作负载和数据库事务模型
CMU Advanced DB 课程笔记#2:数据库工作负载和数据库事务模型
数据库工作负载:
数据库工作负载有主要分为两种:
在线事务处理(OLTP):每次只读取或更新数据库的一小部分,比如说用户去淘宝购物,用户只能对自己的购物车或者地址进行操作,这些操作只会涉及到很小的一部分数据。
在线分析处理(OLAP):和OLTP不同的是,OLAP会对数据库的大量数据进行操作,例如进行连接或聚合运算,比如说淘宝会对大量的用户数据进行分析,来帮助淘宝进行商业决策,更好的为用户服务。
近几年出现了混合事务+分析处理(HATP)的数据库,在HATP数据库中既可以进行OLTP操作,又可以进行OLAP操作,避免了资源的浪费。
如下图所示是常见的企业配置数据库的方式,公司用前端的OLTP数据库来进行事务处理,一个公司可以有好几个OLTP数据库。当公司想要对这几个OLTP数据库内的数据进行分析的时候,公司需要把数据从OLTP数据库拿出来,进行提取转换加载(ETL)操作,该操作会对数据进行清洗以及转换,把数据格式统一起来加载到后端的OLAP数据库中。然后在OLAP数据库中进行分析操作,必要的时候OLAP数据库还会给OLTP数据库返回计算的结果。
以淘宝为例,淘宝在前端用OLTP收集用户的物品点击信息,在后端OLAP数据库中计算用户可能感兴趣的物品,将这个物品返回给前端OLTP数据库,以便用户下次访问的时候将这个物品呈现给用户。
HTAP数据库允许了某些只能运行在后端OLAP数据库的操作运行在前端OLTP数据库中,减少了数据从
OLTP DB --> ETL --> OLAP DB --> OLTP DB
之间传输的时间,但是HTAP不能取代ETL。
数据库事务(Transaction简称为Txn) Model:
Transaction是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。—维基百科
数据库事务模型主要有六种,分别是:Flat Txns,Flat Txns+ Savepoints,Nested Txns,Chained Txns,Compensating Txns,Saga Txns,以下对这些模型进行具体介绍。
Flat Txns:
我们现在所说的transaction大多指的是Flat Txns。Flat Txns以BEGIN开头,后面跟着一系列操作,最后以COMMIT或者ROLLBACK结束。
如下图所示,Txn #1以BEGIN开头,紧接着对A进行读取,对B进行写操作,最后COMMIT,表明B被永久写入数据库中了, Txn #2在对B进行写操作之后ROLLBACK,表明对B的写操作会回滚,B不会被写入数据库中。
Flat Txns的缺点:当数据库需要rollback的时候,需要rollback这个transaction的所有操作。当数据库在进行transaction的时候崩溃了,所有对数据库的写操作都会丢失。比如说银行需要对大量用户数据进行更新,使用FLAT Txns会花费大量的时间更新数据,若这时数据库崩溃或冲突所有操作都会丢失。
Flat Txns+ Savepoints:
为了解决Flat Txns的这个缺点,我们可以给DB加savepoint,savepoint保存了transaction当前的状态,允许用户访问这个状态。用户可以用ROLLBACK命令回滚到某个savepoint,用RELEASE来摧毁某个savepoint。
如下图所示,Txn #1在BEGIN语句执行时候自动生成一个new savepoint,然后对这个savepoint写入A。