文章目录
论文:内存事务中并发控制协议研究综述
DOI:10.7544/issn1000G1239.20210231
摘要
事务为数据库等系统的上层应用提供了强大的保证。NoSQL 数据库通过弱化对事务的支持来获得更高的扩展性,却难以满足 OLTP 等应用的事务性需求。之后提出的 NewSQL 数据库架构回归了高一致性的事务支持,并兼顾了海量数据的高效管理。因此,NewSQL 数据库逐步将事务执行所需的数据从硬盘迁移到内存中以提升事务执行的效率。但是,已有内存事务的并发控制协议与新兴的存储、网络设备并不适配。从处理策略、版本控制、冲突解决 3 个维度对近 10 年来的内存事务中并发控制协议进行了分类阐述,进而从性能、扩展性、持久性 3 个方面比较了有代表性的并发控制协议。之后总结了 4 个改进内存事务并发控制协议的技术思路:消除事务扩展瓶颈,利用新硬件加速事务处理,降低事务中止概率,高效保证事务持久性。最后指出了内存事务并发控制协议的未来研究方向。
相关内容
内存事务系统:主要包括并发控制层、索引层和存储层,其中,并发控制层是内存事务的核心。
传统并发控制协议面临的挑战:
- 如何在解决事务冲突的前提下减少跨核通信?跨分区事务处理降低了性能;
- 集中式锁管理器、集中式时间戳分配器等集中控制成为分布式系统的性能瓶颈,难以扩展;
- 异步持久化方案不再适用于NVM(非易失内存),如何将持久化操作加入并发控制协议,使得适应NVM的性能特点?
并发控制协议的隔离等级:
- 快照隔离性
- 可串行化
- 严格可串行化
十问
Q1 论文试图解决什么问题?
- 分类阐述,从性能、扩展性、持久性 3 个方面比较了有代表性的并发控制协议;
- 总结了 4 个改进内存事务并发控制协议的技术思路:消除事务扩展瓶颈,利用新硬件加速事务处理,降低事务中止概率,高效保证事务持久性;
- 指出了内存事务并发控制协议的未来研究方向
Q2 这是否是一个新的问题?
本文正是为了寻找新的方向。
Q3 这篇文章要验证一个什么科学假设?
比较部分有代表性的并发控制协议性能,总结其中的技术思路,指出未来研究方向。
Q4 有哪些相关研究?如何归类?
并发控制协议的分类,按以下三方面分别归类:
- 事务处理策略
- 悲观并发控制,例如2阶段锁(2PL)——适合冲突频繁的负载
- 乐观并发控制(OCC)——适合短事务、较少冲突场景
- 版本控制
- 单版本并发控制(1VCC)
- 多版本并发控制(MVCC)——适合读事务主导的负载
- 冲突解决
- 基于锁
- 基于时间戳
- 混合:利用时间戳解决“读写”冲突、利用锁解决“写写”冲突
几种代表性探索研究:
- 通过重构时间戳分配机制、缓存热点数据等技术,逐步解决了系统扩展中的瓶颈问题;
- 结合计算能力的提升和新兴网络技术来改进并发控制协议,缩短了事务的执行时间;
- 通过采用更加灵活的提交策略以及数据的多版本技术在不同场景中降低事务中止概率,提升了事务系统的吞吐率;
- 内存事务利用非易失内存和多副本技术,提高了持久性保证的实现效率,并增强了事务系统的容错能力。
Q5 论文中提到的解决方案之关键是什么?
综述论文。
Q6 论文中的实验是如何设计的?
- 各并发控制协议在YCSB负载中随偏移银子变化的系统吞吐,偏移银子越大代表数据的冲突越密集。
- 各并发控制协议执行TPC-C负载中2种事务 new_order 和 payment 性能。
Q7 用于定量评估的数据集是什么?代码有没有开源?
使用4台服务器测试了数据库常用的YCSB和TPC-C两种负载。
Q8 论文中的实验及结果有没有很好地支持需要验证的科学假设?
无假设。
Q9 这篇论文到底有什么贡献?
发现在数据访问较均衡时,5种协议的性能接近,当数据冲突初步增加后,基于时间戳的5种并发协议性能优异(这得益于它们在执行过程种避免了持锁的临界区,允许事务在不违反隔离等级的前提下以对应的时间戳插入串行化序列中),当事务冲突进一步升级后,事务中止率上升,系统吞吐下降,各种并发控制协议表现趋同。
发现在执行周期长的事务中,OCC的验证由于执行周期长而导致频繁失败,2PL由于持锁时间长会阻塞其他事务的执行,TIMESTAMP 和 MVCC在这种场景中表现优异。
Q10 下一步呢?有什么工作可以继续深入?
- 设计感知负载特征的并发控制协议。更灵活的数据分布策略,数据的动态迁移;
- 解决地理上分布系统中事务的扩展性问题。
- 进一步耦合并发控制协议和副本协议,从协议角度减少跨地域交互,将关键路径上的同步交互改为异步交互 ;
- 通过合理的数据布局减少跨地域事务的数据,利用多副本的读写宽带,在保证一定程度一致性的前提下,灵活切换数据分布,多节点同时提供服务;
- 通过NVM等高速存储器件代替传统的持久化介质,在跨地域事务执行时提供持久化保证,加速事务的处理及灾后恢复进程。
- 探索内存事务的服务质量保证方法。
- 合理调整节点执行本地事务和服务其他节点的数据请求顺序;
- 提前预测可能出现的耗时操作并有限执行,来降低内存事务的长尾延迟。