当 MySQL 数据库的单表数据量达到了亿级,会发生什么?
这个现象表示公司的业务上了一个台阶,随着数据量的增加,公司规模也进一步扩大了,是非常喜人的一个改变 ,然而随之而来的其他变化,就没那么讨喜了。
首先,你会发现 MySQL 数据库的查询性能下降明显,单个查询的响应时间更久了。虽然索引有点帮助,但是数据量越大,索引也会越来越大,查找索引的开销也在增加。
紧接着,由于表太大,表结构的维护操作会变得很困难,一个 DDL 操作将耗费很久的时间,同时造成的锁表会给业务带来很大的影响。
再然后,存储空间吃紧了,亿级数据量的单表可不是吃素的,正常情况下,文件大小能达到数百个 GB 乃至数 TB。
更重要的是,针对大表所在数据库的单点写入会使其所在服务器到达性能瓶颈,举个例子,淘宝在双十一的高峰期每秒会有几百万笔订单的写入 ,这对 CPU、内存以及磁盘 I/O 都将造成非常大的压力,最终导致业务响应缓慢。
由于 MySQL 主要依赖垂直扩展来提升性能以及存储,你就需要不停地堆叠硬件配置来满足业务需求,随之而来的,就是数据库成本的大幅增加以及与支出不成正比的微弱收益。
当面临这种状况的时候,分库分表是个好办法,把一个表的数据分别存在不同的数据库实例中,这能解决大部分数据处理的难题,但却引入了新的复杂性,对运维和开发都造成了不小的挑战。
那有没有什么低成本且效率高的解决方案?当然有!用 TiDB 就能完美解决这些问题。
TiDB 是啥?
TiDB 是一款开源的分布式关系型数据库管理系统,由PingCAP开发,旨在解决传统关系型数据库在扩展性和灵活性上的局限。它有很多的优点:
-
TiDB 是开源产品:TiDB 具有一个相当成熟的社区,并且具有相当数量并持续增长的代码贡献者,这使 TiDB 的成熟度越来越高。
-
兼容 MySQL 生态:TiDB 兼容 MySQL 协议和大部分 MySQL 的 SQL 语法,应用程序只需要做少量的改动甚至不需要改动即可运行在 TiDB 上。
-
强大的可扩展性:TiDB 是一个分布式数据库,有着非常好的读、写扩展性,尤其是写扩展性,可以存储海量的数据,数百 TB 数据轻松存储。
-
存算分离架构:使用户可以单独为计算资源或存储资源进行扩容,避免其中一方资源的浪费。
-
HTAP 能力:OLTP 和 OLAP 能力相融合,提供 HTAP 的混合负载能力,赋予 TiDB 强大的业务处理能力和数据查询能力。
-
在线扩缩容与升级:在 TiDB 的存算分离架构下,数据库的扩缩容和升级再也不用停机了,对于长期在线的业务系统来说尤为重要。
这些特性让快要被撑爆的 MySQL 有了近乎完美的解决方案,我们只需要把 MySQL 完整迁移到 TiDB 就行了。这里我们需要用到 NineData 来完成这个工作,NineData 的数据复制能力可以轻松地在同、异构数据源之间进行数据传输,并且具备如下优秀的特性:
1. 迁移过程业务不停机
NineData 提供结构迁移、全量数据迁移及增量数据迁移能力。在数据库迁移过程中,源端可正常提供服务。NineData 可自动完成结构迁移、全量数据迁移,并自动启动 Binlog 的实时监听、采集、解析及复制能力,源端的增量更新数据会被实时复制到目标中。当 NineData 进入到增量数据迁移阶段且复制无延迟时,业务可以在 MySQL 中进行只读验证,并借助 NineData 数据对比工具进行数据一致性验证。业务验证通过后,可进行业务停机切换,整个迁移过程业务停机时间非常短。
2. 强劲的复制性能
在数据库迁移过程中,迁移速度无疑是影响业务能否成功切换割接的重要因素。在此过程中,NineData 针对 MySQL > TiDB 数据复制进行深度性能优化,基于日志分析、智能分片、动态攒批、数据合并、特有数据格式等技术,有效保障全量数据复制、增量数据复制的性能。当前 NineData 全量复制性能高达 200 GB/小时,增量数据复制性能高达 2 万记录/秒。
3. 完善的数据质量保障方案
NineData 提供了多种数据一致性校验方案,包括全量精准校验、快速验及增量校验,可以对迁移数据进行数据一致性强验证。同时,当出现数据不一致时,能够提供一键修复能力。基于 NineData 数据一致性校验能力,可以有效规避因数据质量导致的业务迁移故障。
下面,就手把手教你如何用 NineData 进行迁移。
步骤一:录入源和目标数据源
1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要录入的数据源。
2. 根据页面提示进行配置,然后单击创建数据源完成创建。
步骤二:配置同步链路
1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制。
2. 根据页面提示配置复制任务,由于我们想要实现不停机实时数据迁移,需要在复制类型处额外勾选增量复制。
3. 配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时迁移 MySQL 中新增的增量数据,所有新写入的数据都将一条不漏地同步到 TiDB,每当目标端的增量数据追平源端时,任务面板中的延迟在零点几秒或几秒之间徘徊时,代表当前 TiDB 中的数据已是最新的。
步骤三(可选):校验目标端同步数据的完整性
除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。
1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。
2. 单击数据对比页签,即可展示对比结果(如果步骤二的任务配置中未勾选开启数据一致性对比,则此处还需要单击开启数据对比)。
3. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。
步骤四(可选):配置任务异常告警
由于数据量过于庞大,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。
1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。
2. 单击右上角的配置告警。
3. 输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。
最后
完成了迁移之后,就可以进行一系列的测试,以确保应用程序能够完全兼容 TiDB ,由于 TiDB 本身对于 MySQL 协议的高度兼容性,业务几乎可以无缝从 MySQL 衔接至 TiDB。但事无绝对,测试到 TiDB 没能很好地兼容应用程序,也不用担心,NineData 提供的不停机迁移可以保证业务的连续性,迁移过程完全不会对业务造成任何影响。
至于有些同学关心的费用问题,首先 TiDB 是开源的,NineData 的全量迁移也是完全免费的,还赠送一条增量迁移服务,以实现本文中介绍的不停机迁移,因此从 MySQL 迁移到 TiDB 的过程不会产生费用。