没有合适的资源?快使用搜索试试~ 我知道了~
多主数据库中基于分区的并发控制.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 75 浏览量
2022-11-29
17:39:35
上传
评论
收藏 184KB DOCX 举报
温馨提示
试读
15页
多主数据库中基于分区的并发控制.docx
资源推荐
资源详情
资源评论
0 引 言
随着云计算与大数 据 的发展, 传统 的关系型 数 据 库已无法 满 足 金融市场
业务的需求, 越来越多的用户开始选择云数据库. 计算存储分离架构是当下大
多商业云数据库的解决方案. 在此架构下, 数据库分为存储层和计算层两个部
分: 多个存储节点共同组成一个共享存储层为计算层提供可靠的持久化存储服
务; 计算层则由多个计算节点组成, 每个计算节点运行一个单独的数据库进程.
计算节点缓存一部分数据用于服务用户的读写请求, 当缓存无法命中时, 计算
节点会遵 循替换 策略将 需要的 数据从 存储层 读入缓 存. 大多云数 据库的 计算
节点目前 仅支持 一写多 读的架 构, 即计 算层只存在一个计算节点 拥有数 据的
读写权限, 其余计算节点都仅拥有读权限.
为实 现 集群中写节 点 的扩展, 数据 库领域曾 尝 试 利用锁机 制 实 现同一时
间仅有一个节点拥有数据的写权限并通过网络传递数据页的方法实现多主
[1-2]
,
之后提出基于日志的冲突检测
[3]
或是确定性数据库
[4]
的解决方法. 另一方面, 为
提高系统吞吐量, 现存在部分系统选择将数据库进行分区, 但因此引入了跨分
区 事 务 这 一 问 题 , 导 致 需 要 在 满 足 事 务 ACID (Atomicity, Consistency,
Isolation, Durability)特性与限制事务仅能够访问一个分区这两个条件中取舍.
对于 存 储计算分离 的 架构, 实现 多 个 写节点的 一 大 难点在于 各 写 节点缓
存中数据的一致性维护. 如上所述, 数据库读取数据会先从缓存读取, 这样的
机制便导 致对于 某个数 据各写 节点中 缓存的 版本并 不相同 的情况 出现. 为解
决这种情况, 现有提出基于全局事务日志进行冲突检测的方法
[5]
, 通过为每个
事务分配唯一的全局事务号, 并以此事务号维护事务间的可串行化调度, 在各
个节点上根据事务调度顺序回放与本地缓存数据相关的事务日志以更新各节
点本地缓存. 但在这样的解决方法下, 随着写节点数量的增加, 事务数量增长
导致日志 规模急 剧上升 , 在每个写节点上维 护全局 事务日 志并依 序检查 每条
事务无疑会产生较多不必要的网络及计算存储资源的消耗.
综上所述, 为了在计算存储分离架构的云数据库中实现写性能的扩展, 本
文基于 MySQL 设计并实现多主分区事务插件. 本文的主要贡献如下.
(1)设计分 区算法 . 基于 数据访 问信息 对事务 进行分 区, 各分 区内设 计独
立的验证器, 并维护分区独立的日志记录.
(2)设计事务 序号的分配. 通过事务序 号实现可能有数据访 问冲突的事务
间的串行化, 以事务序号为验证基础的并发控制维护数据一致性.
(3)通过实验 对比全局事务日志的解决方案, 论 证分区方法对多主数 据库
性能的影响.
本文后续内容: 第 1 章介绍多主数据库相关工作; 第 2 章介绍本文提出的
基于分区的多主数据库架构; 第 3 章阐述分区算法的具体实现; 第 4 章说明跨
分区并发控制的设计; 第 5 章通过实验验证本文方案对系统性能的影响; 第 6
章总结全文.
1 相关工作
云数 据 库发展初期 , 大 多实现方法 仅 是为传统 的 关 系型数据 库 添 加云存
储, 如今各大厂商逐渐推出基于存储计算分离架构的云数据库. 亚马逊率先推
出计算存储分离的云数据库产品 Aurora
[6-7]
, 提出“日志即数据库”的思想. 其认
为由于日志中已包含有数据的信息, 故仅通过日志就可以恢复出数据, 可以仅
向 存 储 层 传 输 Redo 日 志 , 减 少 网 络 I/O (Input/Output), 并 在 存 储 层 回 放
Redo 日志生成数据页供计算层读取; 同时由写节点向读节点广播日志, 读节
点通过回放日志更新缓存, 以此实现节点缓存的一致. 阿里云的 PolarDB 同样
沿用存储计算分离的架构, 通过写节点广播日志流帮助其余节点缓存的更新,
PolarDB 的设计在计算层做的改 动较少, 其主要通过自研的分布式 文件系统
PolarFS
[8]
以及存储引擎 X-Engine
[9]
更好地利用高性能硬件的特性以实现存储
层的优化. 随后, 微软推出的 Socrates
[10]
以及华为推出的 Taurus
[11]
在计算层
依旧沿用一写多读的设计, 但存储层的设计各有特色.
迄今为止, 大多数的商用云数据库只提供一写多读的配置, 即仅实现了读
性能的扩展, 而写性能的扩展还没有很好的实践方案. 目前已实现的多主解决
方案, 如 Oracle RAC
[1]
和 DB2 pureScale
[2]
, 这二者的设计思想都是利用锁机
制和数据页的网络传输实现数据的一致性. 不同的是, pureScale 通过全局锁
管理器和全局缓存池实现, 各个实例通过 RDMA 与二者通信; 而 Oracle RAC
则是将锁 管理器 分布在 各个实 例, 并通过在 实例间 构建高 速内联 网络实 现缓
存融合. 无论是集中式还是分布式的锁管理方法, 频繁的锁申请与数据页的传
输都会限制整个系统的扩展性和吞吐量.
为 消 除 锁 的 “瓶 颈 ”, 微 软 提 出 了 一 款 日 志 结 构 的 共 享 存 储 数 据 库 模 型
Hyder
[3]
, 其架构分为 3 层——事务层、索引层、存储层. 当本地事务执行完成
后会将更 新打包 广播至 存储层 的日志 末尾, 所有服务器都会依据 此日志 有序
进行回放, 包括一开始执行事务的服务器, 并在回放日志的过程中进行冲突检
测(meld). 同时, Hyder 认为冲突检测阶段是此系统的一大“瓶颈”. Bernstein 等
为此做了进一步探究, 提出了并行化 meld 加速冲突检测过程
[12]
, 以及通过数
据库分区将 meld 算法本身并行化
[13]
的方法.
2 系统架构
本文设计了如图 1 所示的多主数据库架构: 沿用现有云数据库存储计算分
离的架构, 将数据库分为存储层与计算层两个部分; 每个计算节点上运行有独
立的 MySQL 进 程, 这些计算 节点会将日 志和数 据页写 到远程的共 享存储 上;
通过分区 算法将 数据库 划分至 若干个 分区, 分区内的所有计算节 点都拥 有本
分区数据的读写权限; 每个分区内有独立的事务日志以及验证器, 故同一分区
内的计算节点间的缓存一致性可依靠分区内部有序的事务日志和验证机制实
现.
图 1
剩余14页未读,继续阅读
资源评论
罗伯特之技术屋
- 粉丝: 3666
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Foobar2000-1.3.9.0(顶配高保真HiFi版)
- 基于Java的petHome宠物交易平台设计源码
- 基于python的12306网站抢票与GUI展示系统+源码(毕业设计&课程设计&项目开发)
- 自动存包柜设计:使用单片机和.net联合开发
- 电子电器架构 - AUTOSAR软件架构Current Features in a Nutshell.docx
- 基于python开发的12306网站抢票系统+源码+开发文档+代码解析(毕业设计&课程设计&项目开发)
- 数据库课设:图书馆管理系统(Java+MySQL)
- 基于STM32的智能家居控制系统.pdsprj
- 基于python实现LDPC码的编码译码,以CCSDS上行LDPC短码为例+源码(毕业设计&课程设计&项目开发)
- 华为OD机考题目Java
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功