PolarDB-X内核新版本:更精细的数据管理
概览
非常高兴为大家带来PolarDB-X内核5.4.14版本。在最新版本中,我们继续加强了作为企业级产品的数据可管理性,使其更加适应企业的诉求。
对于分布式数据库而言,海量数据的管理是一个细致性工作。除了提供必备能力外,是否能更加精细化,是用户做选择时的一个重要考量,可管理性的深度也会直接影响到用户实际使用数据库的成本。此外,新版本还提供了更加强大的SQL能力,更好的MySQL兼容性,为用户提供更好的服务,是我们长期追求的目标。
针对这些方向,PolarDB-X在内核5.4.14版本中提供的冷热数据存储分离、数据Locality、数据热点诊断、并行DML优化、Flashback Query和AUTO_INCREMENT兼容性,大幅提升了数据的可管理性、SQL处理能力和兼容性,并针对数据热点问题为用户提供了更多运维手段。这些努力加在一起,用户将获得更专业的使用体验,让PolarDB-X在成熟的云原生分布式数据库道路上更向前迈进。
除此之外,在这一版本中相较于前序版本也有了长足的进步,修复了 16个 Issues,并融入了24个增强特性。我们会持续将新版本的功能,开放同步到开源社区。
更精细的数据管理
对数据的可管理性是数据库的一个重要能力维度, 我们总结了用户和市场的反馈,这里包含了「控制数据具体的存储位置」,「按照数据的访问频度进行区分管理」,「直观的数据分布管理」,PolarDB-X 5.4.14版本从内核等多个方面针对这些问题进行了加强。
冷热数据存储分离
让我们先看一个有趣的场景。
在数据库的使用过程中,每天有大量的数据写入和更新。然而,通常只有时间邻近的,如一个月内,甚至一周内的数据才会被频繁更新和访问。而剩下的大量数据,都默默躺在磁盘的角落中,给存储空间带来了极大的浪费,也增加了数据库维护的成本。
你希望将热数据保留在高性能的存储设备中,用于应对日常频繁的写入与更新,满足用户对事务型数据处理的需要;冷数据则被迁移到低成本的存储设备里,减轻热数据的维护压力,但同时能对冷数据进行查询和局部订正。
在PolarDB-X 5.4.14版本中,我们基于OSS存储服务,推出冷热数据分离存储这一新功能,您可以便捷地将冷数据从源表中剥离出来,归档至更低成本的OSS中,形成一张归档表。同时,归档表支持高效的主键与索引点查、复杂分析型查询,满足高可用、MySQL兼容性和任意时间点闪回等特性,您可以像访问MySQL表一样来访问归档表。
PolarDB-X 冷热分离存储充分利用了OSS服务成本低、容量大的优良特性,将冷数据快速高效地从在线库中剥离出来,减轻了在线数据维护压力、以及在线库的规模成本,降低了全量数据的存储成本。同时,提供与MySQL兼容的访问方式,兼顾点查与分析型查询的性能,并支持大数据产品的接入。
数据Locality
分布式数据架构下,数据进行了打散分布,但从业务角度出发,往往又需要将一类数据进行集中式存储。如何指定数据存储的位置,PolarDB-X 5.4.14针对此类问题提出了数据Locality解决方案。
定义分区级别隔离(替代多租户机制)
通过指定分区级别的Locality,可以将同一张逻辑表的不同分区控制在不同存储节点上,目前Locality对Range、Hash、LIST三种分区方式均支持。
定义单表存储位置
通过指定单表的Locality可以使单表分布于不同存储节点上,从而隔离其物理存储资源。
数据热点诊断
在分布式数据架构下,最理想的情况就是各分区间数据和流量都是均衡的,能充分发挥出多节点的分布式处理能力。为了达到最理想的效果,就要求数据库尽量避免出现热点分区,包括流量的热点和数据量的热点。避免热点的出现,首先就需要能快速便捷地发现热点分区,从而能进行针对性的处理。因此,快速准确地找出热点分区就成为分布式数据库所需的一项重要能力。
功能概述
首先选取一个小范围数据做介绍,如下图,纵轴表示了逻辑库、逻辑表、逻辑分区间的关系,并且分区按照逻辑序号进行排序。横轴表示时间,图像下方和右方的柱形图表示了汇总数据,下方柱形图表示纵向的求和,即某时刻所有分区的访问量的求和,右方的柱形图表示横向的求和,即某分区所有时间范围内的访问量求和。
存储节点视角
可以清晰直观的看到数据在物理存储节点是否均衡,数据在各个Partition中分布情况,是否存在物理存储节点的热点。
TPC-C热点分析
用TPC-C流量进行测试,可以看到一个完整的热力分布情况,从图中可以明显发现TPC-C的流量存在两块热点区域,并且通过纵轴的宽度对比也能发现数据量的热点。
更强大的SQL能力
并行DML优化
分布式数据库基于并行计算的DML以及大事务的支持能力,可以有效满足跑批处理和执行效率。在新版本中,采用多线程操作,同时运行解析任务和执行物理计划;将原来单个逻辑任务内调度变成多个逻辑任务共同调度,大大提升了执行效率。
优化后,对于单条SQL引发大规模数据修改时,能够提升2倍左右的性能,特别适合于大事务、数据导入导出场景。
Flashback Query功能
在 IT 圈内,“删库跑路”已经成为程序员经常提及的一句玩笑话。虽然是玩笑话,却反映了数据库对企业的重要性。删库跑路事件不常有,但因粗心导致的误删数据却屡见不鲜。要么手误,要么发布的代码存在bug,导致数据被误删,虽是无心,但是破坏力惊人。
首先,我们以一个实际误删数据的事故开场。
我们来梳理下事故的时间线:
T1:小明维护了一张员工表,里面记录着公司的员工信息。
T2:小明需要删除Mary的记录,因此他到数据库里面执行了一条 DELETE 语句,本意是想删除用户 Mary 的记录,但是因为手贱,漏了一个and语句, 导致员工 Ralph 的数据也被意外删除。
T3:此时业务仍在继续,John 被删除, Tim 和 Jose 被插入到表中。而此时粗心的小明发现了数据被误删,迫切希望恢复数据。
围绕这一次的数据误删事故,看看 PolarDB-X 是如何拯救粗心的小明的?
PolarDB-X 在新版本提供Flashback Query功能,针对行级误删场景,提供短时间内误操作的快速回退能力。
错误SQL发生时,变更都会记录在版本为 Vn+1 的 undo log 中;T2 时,发现了误改问题并确定误操作时间和影响的数据范围;通过 Flashback Query 能力直接查到了被影响的两行记录在 T1 时刻正确的值;根据 Flashback Query 返回的正确值对数据进行了订正。
更好的MySQL兼容性
AUTO_INCREMENT兼容性
分布式数据库提供全局唯一数字序列的主要目的是为了生成全局唯一和有序递增的数字序列,常用于主键列、唯一索引列等列值的生成。
在新版本中,为了与MySQL自增列的特性保持良好的兼容性,PolarDB-X提供了全局唯一、连续、单调递增的New Sequence,产生的值是默认从1开始的自然数序列。在AUTO模式库中建表时,指定AUTO_INCREMENT自增列,将默认自动为该表创建并关联一个New Sequence对象,用于在INSERT时自动填充自增列的值。
展望
我们在云原生分布式数据库发展的道路上,不断的前进和提升,PolarDB-X 内核5.4.14版本是一个小小的里程碑,也是我们前进的新起点。在后续的版本规划中,我们将继续推出灵活计算存储解耦、数据表优化等技术,为用户提供超越以往形态的使用体验。