db_9 事务处理技术
db_10 数据库技术新发展
概述
数据仓库是支持管理决策过程的、面向主题的、集成的、随时间而增长的持久数据集合
- 数据仓库的业务
- 数据仓库的业务处理:OLAP 联机分析处理
- 数据库的业务处理:OLTP 联机事务处理
- 数据仓库系统组成
- 数据源
- 数据仓库管理工具
- 数据仓库
- 分析工具
- 非结构化数据管理
- 统一数据模型:四面体模型
- 语义特征、底层特征、基本属性、原始数据刻面
- 统一性 集成性 关联性 扩展性
- 非结构化数据管理系统 —— AUDR
- 组件化、 多引擎的体系结构
- 优点: 可扩展 可定制
- SQL
- 传统关系型数据库,支持SQL操作、事务ACID特性
- 几千用户,TB级数据
- NoSQL
- Not only SQL,非关系型的数据库,水平可扩展、分布式
- 不使用SQL,不支持事务的ACID操作
- HBase、MongoDB等
- NewSQL
- 新的可扩展/高性能数据库
- 不仅具有NoSQL的海量数据存储管理能力,还保持了传统数据库支持ACID和SQL等特性
- 华为云数据库GaussDB,VoltDB,OceanBase等
分布式数据库
定义
分布式数据库是由一组分布在计算机网络的不同结点上的数据组成,每个结点具有独立处理的能力(称为场地自治),可以执行局部应用,同时每个结点也能通过网络通信支持全局应用。
- 局部应用:只操作一个结点上数据库的应用
- 全局应用:操作两个或两个以上节点上数据库的应用
前提:数据分布
条件:
- 场地自治性(局部应用)
- 自治场地之间的协作性(全局应用)分布式数据库系统逻辑上如同一个集中式数据库一样,用户可以在任何场地执行全局应用
特点
(1)数据独立性
- 数据的逻辑独立性和物理独立性
- 数据的分布独立性(也称分布透明性)
- 数据的逻辑分片、数据物理位置分布的细节、重复副本(冗余数据)一致性问题、局部结点上的数据模型等与用户程序无关
(2)集中与自治相结合的控制结构
数据共享
- 局部共享
- 全局共享
- 各局部的DBMS可以独立的管理局部的数据库,具有自治功能
- 系统又设有集中控制结构,协调各局部DBMS的工作,执行全局应用
(3)适当增加数据冗余
在不同的结点存储同一数据的多个副本
提高系统性能
- 系统可以选择用户最近的数据副本来进行操作,减少通信代价
提高系统的可靠性、可用性
- 不利于更新,增加了系统维护代价
(4)全局的一致性、可串行性和可恢复性
各局部数据库 集中式数据库的一致性、可串行性和可恢复性
数据库的全局一致性、并行操作的可串行性和系统的全局可恢复性
分布式数据库系统的体系结构
- 全局外模式
- 全局应用的用户视图,是全局概念模式的子集
- 全局外模式/全局概念模式映像(映像1)
- 全局概念模式
- 定义分布式数据库中数据的整体逻辑结构,使得数据如同没有分布一样
- 全局概念模式/分片模式映象(映象2)
- 每一个全局关系可以分为若干互不相交的部分,每一部分称为一个片段
- 映像2定义全局关系到片段的映象。这种映象是一对多的
- 分片模式
- 分片模式/分布模式映象
- 定义片段到节点的映象
- 分布模式
- 定义片段的存放结点。分布模式的映象类型确定了分布式数据库是冗余的还是非冗余的。
- 分布模式/局部数据库概念模式映象(映象4)
- 该映象把存储在局部场地的全局关系或全局关系的片段映象为各局部概念模式
数据分片
- 水平分片
- 将关系依照一定条件按行分为不相交的若干子集,每个子集称为一个水平片段
- 垂直分片
- 将关系按列分为若干属性子集,每个子集称为一个垂直片段
- 垂直分片的片段通过连接的方法恢复原关系
- 垂直分片的诸片段通常都包含关系的码
- 导出分片
- 分片的条件不是关系本身属性条件,而是其它关系的属性条件
- 如SC(SNO,CNO,G)按S关系中学生所在的系分片
- 混合分片
- 指按上述三种分片方式得到的片段,继续按另一种方式分片。
数据分片的约束:
- 完全性
- 必须完全划分为若干片段
- 不允许某些数据属于全局关系但不属于任何片段
- 不相交性
- 不允许一个全局关系的某些数据既属于该全局关系的某一 个片段又属于另一个片段
- 垂直分片的码属性除外
- 可重构性
- 可以由片段重构全局关系
- 水平分片用并操作重构
- 垂直分片用连接操作重构
分布透明性
- 分片透明性
- 用户或应用程序只对全局关系进行操作而不必考虑关系的分片
- 它是分布透明性的最高层次
- 位置透明性
- 用户或应用程序不必了解片段的存储场地、各数据副本的一致性
- 局部数据模型透明性
- 用户或应用程序不必了解局部场地上使用的是哪种数据模型
- 模型的转换以及查询语言等的转换均由映象4完成
分布式数据库管理系统DDBMS
组成
LDBMS(局部场地上的数据库管理系统)
- 建立和管理局部数据库
- 提供场地自治能力
- 执行局部应用及全局查询的子查询
GDBMS(全局数据库管理系统)
- 提供分布透明性,协调全局事务的执行,协调各局部DBMS以完成全局应用
- 保证数据库的全局一致性,执行并发控制,实现更新同步,提供全局恢复功能
GDD(全局数据字典)
- 存放全局概念模式、分片模式、分布模式的定义以及各模式之间映象的定义
- 存放有关用户存取权限的定义,以保证全局用户的合法权限和数据库的安全性
- 存放数据完整性约束条件的定义
CM(通信管理)
- 在分布式数据库各场地之间传递消息和数据,完成通信功能
分类
按全局控制方式分类
- 全局控制集中的DDBMS
- GDBMS集中在某一结点上,GDD 只有一个,也放在该结点上
- 优点: 控制简单,容易设计实现
- 缺点: 易形成瓶颈,并且一旦该结点 出现故障,整个系统将瘫痪
- 全局控制分散的DDBMS
- GDBMS分散在每一个结点上 GDD 也在每个结点上 有一份
- 完全分布的DDBMS
- 优点:结点独立,自治性强,单个结点出现问题不会使系统瘫痪
- 缺点:全局控制的协调机制和一致性维护都比较复杂
- 全局控制部分分散的DDBMS
- GDBMS、GDD分散在某些节点上,介于上述两者之间的体系结构
按局部DBMS的类型分类
- 同构型DDBMS
- 每个结点的局部数据库具有相同的DBMS
- 异构型DDBMS
- 各结点的局部数据库具有不同的DBMS
分布式查询处理和优化
查询类型
- 局部查询
- 只涉及单个结点的数据,可以采用集中式数据库的处理技术
远程查询
- 涉及单个结点的数据,可以采用集中式数据库的处理技术
全局查询
- 涉及到多个结点的数据
查询处理
- 查询分解
- 把全局查询分解为若干子查询,每个子查询只涉及某一个结点的数据, 可由局部DBMS处理
- 必须选择查询开销最省的那些结点(物理片段)
- 选择操作执行的次序
- 主要是确定涉及不同结点上关系的连接和并操作的次序
- 选择执行操作的方法
- 包括选择存取路径、选择某种操作的算法以及连接的执行方法
查询优化目标
- 分布优化:涉及到多个站点的查询执行策略
- 局部优化
使查询执行时通信代价最省
查询执行的开销:I/O代价+CPU代价+通信代价
传送时间T=总传输延迟+总数据量/传输速度
通信代价:$TC(X)= C0+X* C1$
- C0为两结点初始化一次传输所花费的开销
- X为数据传输量
- C1为传输率,即单位数据传输所花费的时间
半连接法
不同结点之间的连接操作和并操作是数据传输的主要原因
连接查询的优化是优化中研究的重要问题
半连接:使用半连接来缩减关系(或片段)进而节省传输开销
$R\propto _{A=B}S=R\Join _{A=B}(\prod _B(S))$
$R\Join _{A=B}S=(R\propto _{A=B}S)\Join_{A=B}S\\=(R\Join _{A=B}(\prod _B(S)))\Join_{A=B}$
半连接的通讯代价
$CSJ=2C0+ C1 (size(B)card(\prod_B(S))+size(R)*card(R’))$
不采用半连接的通讯代价
$CJN=C0+C1 size(R)card(R) $
当R中参与连接的元组足够少时 采用半连接策略是有利的
分布式事务处理
原子性、可串行性
在分布式数据库系统中,一个全局事务被划分为在许多结点上的子事务
分布事务的原子性是:
- 组成该事务的所有子事务要么一致地全部提交,要么一致地全部回滚
- 在多用户系统中,还必须保证分布式事务的可串行性
事务的恢复
局部事务管理器
- 每个场地都有一个局部事务管理器,负责管理局部子事务的执
- 各局部事务管理器之间必须相互协调,保证分布事务的原子性
两段提交协议(2PCP)
对局部事务管理器进行协调,保证分布事务原子性
协调者:负责作出该事务是提交还是撤消的最后决定
参与者:负责管理相应子事务的执行以及在各自局部数据库上执行写操作
第一阶段:协调者征求意见作决定
- 协调者向所有参与者发出“准备提交”信息,并记入日志
- 参与者准备提交就回答“就绪”,否则回答“撤消”,并记入日志
- 协调者收到所有参与者的“就绪”信息,则作出“提交”决定,否则将作出“撤消”决定
第二阶段:参与者执行决定
- 协调者将有关决定写入日志,然后把这个决定发送给所有的参与者
- 所有参与者收到命令后,首先在日志中记入“收到提交/撤消决定”的信息, 并向协调者发送应答消息,最后执行相应决定
- 协调者收到所有参与者的应答消息后,一个事务的执行到此结束。有关日 志信息可以脱机保存。
并发控制
- 分布式数据库系统支持多副本,保证副本数据一致性
- 由于事务的分布执行,封锁的方法会引起全局死锁
- 处理多副本封锁的几种可行方法
- 对写操作,要申请所有副本的X锁;对读操作,只要申请 某个副本的S锁
- 无论是写操作还是读操作都要对大多数副本申请X锁或S锁
- 规定某个场地上的副本为主副本,所有的读、写操作均 申请对主副本的封锁
- 解决全局死锁(两个以上场地上发生死锁)
- 死锁检测及解除方式
- 死锁预防,如对事务按某一标准进行排序,只允许事务按这一次序单向等待
云计算有关的数据库服务 DBaaS
云数据库RDS
在硬件资源池服务器中部署传统数据库实例
将传统数据库部署在云上,借助虚拟化技术实现云数据库服务,并且可以 很好兼容现有应用
一主多从的结构
- 主:数据库实例运行在独立的虚拟主机或容器上
- 从:每个实例都拥有隔离的存储,存储可以是本地存储或云存储
问题
- 资源利用率
- 本地存储方案中实例规格固定,存在资源浪费
- 云存储方案中, 为了提高可用性,需要对数据进行3 副本备份,突出的写入放大问题对存储资源以及网络资源都造成了极大浪费
- 扩展性
- 当用户需要横向扩展或纵向扩展时,同步与迁移等待长
- 可用性
- 当主实例发生故障时,从实例不仅会出现一定量的数据丢失,而且在数据未更新到最新版本前只提供只读服务
举例:
- 华为云数据库RDS,阿里云RDS,亚马逊AWS RDS 与微软Azure SQL等产品
云原生数据库
是针对云的环境设计数据库架构,提供具有更好弹性及高可用的数据库服务
计算与存储分离:
在动态资源池的基础上,通过数据库内部计算与存储分离, 将存储管理放到下层共享存储中,从而解决数据同步带来的延时问题,并同时增加来计算能力的横向扩展性
- 计算:消耗CPU和内存资源的查询处理、事务管理、并发控制与日志处理等 功能
- 存储:消耗存储资源的日志与数据存储持久化相关功能
- 计算实例只处理逻辑,不保存状态信息,并且不进行数据持久化相关计算,不负责存储数据,部分与数据持久化相关的计算能力下移至存储层加以实现
- 存储层有状态,只存储数据,不处理业务逻辑
- 计算和存储解耦,计算资源与存储资源通过网络动态组合,从而更好地实现按需驱动
特点:
- 计算存储分离:存储与计算进行解耦合,实现存储与计算分离
- 计算节点无状态:计算节点无状态或较少状态
- 存储集群灵巧化:小存储块方式组织副本,用以减少平均恢复时间
举例:
- 亚马逊AWS Aurora、GaussDB
原生分布式数据库
数据的存储、查询、处理都天然具备分布式特性,被称为“真正意义上的分布式数据库”
- 由多个同构型的数据库节点组成
- 采用Share-Nothing结构,即各节点相互独立,各自处理自己的数据,提供对等的读写服务
- 每个节点都具备分布式处理的能力
- 相互连接组合形成面向用户的单个数据库
优点:
- 系统自动扩容、按需扩容,不受数量和规模的限制,且无需人为干预
- 数据由系统自动打散并存储多个副本,通过一致性协议保证多个副本和事务日志的一致性,对分布式事务、全局MVCC等支持更为彻底
- 部署灵活,不被特定硬件和服务绑定,既可以部署在本地或私有云,也可以部署在任意公有云,甚至跨多基础设施的混合云或多云部署
产品举例:
- Google Spanner,蚂蚁集团OceanBase等