【运维Pro】: 由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识,我们更希望能够通过介绍这些知识背后的原理,让大家和我们一起感知数据库的美妙。
前言
数据库迁移是大多数数据库项目实施过程中绕不开的话题。数据迁移实施复杂度高,意外情况多,效率成问题,令很多现场工程师大为头痛。YMatrix 开发出 MatrixShift 工具,专门用于从 Greeplum 向 YMatrix 以及 YMatrix 之间迁移数据,性能出众,功能强大,广受客户和 YMatrix 现场工程师们好评。
01. MatrixShift 的诞生
超融合数据库 YMatrix 功能、性能表现优异,同时和基于 Greenplum 开发的应用能够完美兼容;因此,在当前数据库国产化替代的大趋势下,越来越多的客户选择使用 YMatrix 替换原有的 Greenplum 产品。而随着 YMatrix 在越来越多的数据库替换场景中落地,迁移数据变成了项目实施过程中绕不开的环节 -- 正确、完整的完成数据迁移成为发挥 YMatrix 数据库强大功能、卓越性能的前置条件。
在这个大背景下,MatrixShift 诞生于某制造业客户 YMatrix 替换 Greenplum 的项目中。在过去几年中,经过在若干次复杂客户场景中的不断打磨,现在 MatrixShift 已经成为深受 YMatrix 实施团队和客户喜爱产品之一,在每次设计数据迁移的项目实施过程中都发挥了重要作用。
02. MatrixShift 能做什么?
简言之,MatrixShift 能够高效的完成:
- 将数据从 Greenplum 各版本迁移至 YMatrix;
- 当进行 YMatrix 的大版本升级时,从旧版本 YMatrix 迁移数据至新版本 YMatrix。
目前的版本支持情况:
![](https://img.ymatrix.cn/ymatrix_home/Group 6052_1699323052.png)
03. MatrixShift 性能很赞!
研发团队陆陆续续针对 MatrixShift 做了一些性能测试,然而由于产品随着项目实施不断改进,所以 MatrixShift 的性能上限是 ----- 未测得。
至于“未测得”的原因,是因为软件性能总是受限于硬件性能水平,这里主要指 CPU,网络 IO,和硬盘 IO。在目前的项目实施过程中, MatrixShift 总是能将其中一项资源的利用率提升至 100% 的水平,也就是这项资源成为了性能瓶颈;而如果能够继续提升这项资源的能力,那么 MatrixShift 的效率还能进一步提升。
在实际项目实施过程中,YMatrix 实施团队在某大型国有银行的 YMatrix 替换 Greenplum 的项目中,测得了目前的比较高的性能数据。
当然,如果硬件水平进一步提升,MatrixShift 还能跑的更快。
04. MatrixShift 怎么跑的这么快?
MatrixShift 出众的性能和优秀的基础架构与研发团队的不断打磨息息相关。
- 点对点传输机制
对于一般的使用场景,插入数据时我们总是必经主节点 (Master), 一条 insert 语句首先将数据发送至主节点,由数据分布策略确定这条数据应当存放至哪个数据节点后,数据才会由主节点分发至对应的数据节点进行存储。
所以,简单插入机制的性能必然会被主节点的带宽、CPU 等资源所限制,主节点成为了“单点瓶颈”。
而 MatrixShift 采用了点对点传输机制,迁移时旧集群数据节点的数据会跳过主节点,直接传输至新集群的对应节点上,而主节点仅作为处理控制信号使用,这样就避免了主节点的“单点瓶颈”。
- 小表优化
在生产场景中,数据库中不仅有 TB 级的大表,也有很多 MB 级的小表,点对点传输虽然针对大表迁移非常高效,但是当涉及小表时,反而是个累赘。
在真正的迁移操作被启动前,为了准备好“点对点”的传输机制,MatrixShift 可能会需要分钟级的准备过程;如果是迁移大表,这个过程的开销就是必要的“磨刀不误砍柴工”,而对于小表,可能在准备完成之后,整个传输过程瞬间就结束,相较直接插入数据反而得不偿失。
因此,MatrixShift 对于小表 (由配置决定),会使用基本的传输模式,也就是简单的 Insert 语句来执行;这样就能够保证在迁移小表时也能有更好的效率。
- 传输压缩
在迁移环节中,YMatrix 实施团队最常看到硬件资源瓶颈出现在网络 IO --- 传输数据把网络带宽打满了。因此,只要能降低传输数据量,就能进一步提升速度。
基于此,MatrixShift 增加了压缩功能,目前支持了 无压缩 / gzip / zstd / lz4 四种模式。当 CPU 性能不足时,可以选择无压缩;而 ztsd, lz4 各有所长,一个压缩/解压速度更快,一个压缩比更高,总之可以根据生产环境中的硬件实际情况选择不同的压缩方式。
MatrixShift 关于性能,功能的优化除了以上提到的三点还有非常多,限于篇幅不一一介绍。但是 MatrixShift 的研发团队的思路是一贯而简单的 --- 基于真实场景反复打磨优化,才能够提供真正实用、高效的产品。
05. MatrixShift 超好用!
性能好不够,MatrixShift 还很好用。
- WHERE 过滤
在迁移过程中,有时会需要丢弃一部分没有价值数据,在这种场景下,就可以使用 WHERE 过滤功能,用简单的 SQL 即可在迁移时跳过废弃的数据,减少迁移的数据量,从而加速整个流程。
以下是一个简单 WHER 过滤的配置示例:
![](https://img.ymatrix.cn/ymatrix_home/截屏2023-11-07 上午10.25.07_1699323934.png)
- 进度监控
实际迁移过程中,一方面表很多,另一方面大表迁移过程耗时很长,而由于环境、数据的复杂性,整个迁移过程中也有可能存在零星的失败。
为了让广大实施人员不在迁移过程中心里有数,MatrixShift 在即将发布的版本中提供了命令行 UI,能够实时展示迁移进度,以及内部执行信息等;而 MatrixUI 也会在不久的将来支持 MatrixShift 的配置,力求做到“点点鼠标,完成迁移”。
除此之外, MatrixShift 还支持数据校验、迁移索引等更多更灵活的配置,种种在实际场景中反复打磨的功能不一而足,最终成就了一款广受好评的迁移工具。
06. 总结
作为 YMatrix 重要的增强组件之一,MatrixShift 已经在诸多复杂的项目中发挥了重要作用,好用且高效。如果你也有从 Greenplum 迁移数据的需求,MatrixShift 就是不二之选。
更多关于 MatrixShift 的介绍,可以参阅官方文档:
-
MatrixShift 使用手册: https://www.ymatrix.cn/doc/latest/tools/mxshift
-
数据迁移思路: https://www.ymatrix.cn/doc/latest/maintain/migrate/guidebook