问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

TiDB + ES:转转业财系统亿级数据存储优化实践

创作时间:
作者:
@小白创作中心

TiDB + ES:转转业财系统亿级数据存储优化实践

引用
1
来源
1.
https://cn.pingcap.com/blog/tidb-es-in-zhuanzhuan/

转转业财系统在面对亿级数据存储挑战时,通过采用TiDB和Elasticsearch(ES)的方案,成功优化了数据存储和查询性能。本文详细介绍了这一优化实践,包括背景分析、方案选择、实践步骤和最终成果等多个方面。

背景

1.1 现状

转转业财系统于2021年开始构建,初期为了快速上线,选择了主动接收上游业务系统的数据。然而,随着数据量的持续增长,系统逐渐达到承载极限,面临诸多问题。

1.2 数据量统计

下表展示了业财系统中数据量较大的表:

从上图可以看出,近几个月由于新业务的增加,每月的数据增量已达到一千万。

1.3 慢查询情况

目前,系统每天的慢查询数量已达到千量级。慢查询不仅影响用户体验,还会大量消耗机器资源,严重时可能导致机器宕机。此外,由于转转MySQL数据库采用单机多实例架构,一台物理机上部署多套集群实例,慢查询还可能影响其他集群,引发连锁反应。

设计目标

2.1 解决数据量问题

目标是在未来五年内无需考虑数据库数据量问题,能够轻松应对业务增长和全量业务覆盖,同时具备良好的扩展性,为输出更多数据报表奠定基础。

2.2 解决读写性能

通过优化提升报表查询效率,减少定时任务执行时间,避免慢查询导致的任务失败和接口超时问题,提高服务稳定性。

方案选择

3.1 DB 存储方案选型

方案一:分库分表

  • 优点

  • 将数据分散到多个数据库和表中,减轻单一数据库负载压力,提高读写性能和响应速度。

  • 拆分的表结构相同,程序改造较少。

  • 缺点

  • 需要提前规划分片规则,扩展性较差。

  • 拆分规则难以抽象。

  • 存在跨库事务问题。

  • 适用场景

  • 高并发访问且需要处理海量数据的场景。

  • 数据有统一业务规则主键,可均匀分布。

  • 业财系统适用分析

  • 业财系统数据多样且复杂,难以定义业务主键。

  • 数据量快速增长或接入新业务时可能再次面临数据量问题。

方案二:冷热库

  • 优点

  • 将不常用数据移动到归档存储,降低成本。

  • 减少在线存储数据量,提高性能。

  • 长期保存历史数据,支持数据恢复。

  • 缺点

  • 需保证归档事务性,防止数据重复。

  • 需考虑合适的归档策略。

  • 业务复杂的数据不适用。

  • 适用场景

  • 存在大量低频访问的历史数据。

  • 写入操作比读取操作更频繁。

  • 需要降低成本的场景。

  • 业财系统适用分析

  • 业财系统业务数据复杂,现阶段还会更改和查询历史数据,边界模糊。

  • 后续接入更多业务数据时,可能需要重新考虑边界等问题。

方案三:TiDB

  • 优点

  • 高度兼容MySQL,迁移成本低。

  • 支持水平弹性扩展,轻松应对高并发、海量数据场景。

  • 缺点

  • 仍有一些MySQL特性和行为不支持或表现有差异。

  • 系统复杂,组件较多。

  • 适用场景

  • 金融行业属性场景,要求高可靠性和可扩展性。

  • 大量数据及高并发的OLTP场景。

  • 数据汇聚、二次加工处理场景。

  • 业财系统适用分析

  • TiDB兼容MySQL,改动少。

  • 可以应对近几年的数据量增长。

  • 支持大表的列操作,扩展性高,符合业财现状。

方案四:OceanBase

  • 优点

  • 采用读写分离架构,性能高。

  • 高兼容性,支持MySQL/ORACLE功能。

  • 高可用性,数据多副本存储。

  • 缺点

  • 对环境要求极高,需使用指定服务器。

  • 学习和运维成本高。

  • 依赖底层硬件和网络稳定性。

  • 适用场景

  • 金融级数据可靠性需求。

  • 面对飞速增长的业务数据量。

  • 业财系统适用分析

  • 目前运维团队未维护,暂不考虑此方案。

综合分析,TiDB是最适合转转业财系统的方案,能够在短时间内解决数据量问题,且改动成本较低。

3.2 慢查询优化方案

大部分慢查询是由于联表查询导致的,因此主要解决联表问题。经过对比分析,选择ES方案。

方案实践

4.1 方案实践步骤

考虑到数据量突增和业务连续性,建议先切换底层数据存储,再接入ES。这样既能保证数据完整性,又能降低实施风险。

4.2 切换底层数据存储步骤

迁移过程要求:

  • 检查TiDB是否兼容现有SQL语句。
  • 保证数据完整性,迁移前后数据一致。
  • 支持回滚,确保系统可用性。

4.3 接入 ES

  1. 根据报表查询页面的功能和联表SQL分析,设计索引模型以优化查询性能。
  2. 考虑DB与ES之间增量数据的同步方式,最终选择Kafka进行数据订阅。
  3. 使用公司内部提供的ECP工具完成历史数据同步。

总结与成果

目前,业财系统已成功完成底层数据存储的切换,解决了数据量存储问题,并成功接入更多业务数据。引入ES后,报表页面超时等问题也得到解决。此次优化的核心理念是在不影响业务使用的前提下进行系统重构,后续将继续完善慢SQL治理和定时任务优化等工作。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号