前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >阿里终面:业务主表读写缓慢如何优化?

阿里终面:业务主表读写缓慢如何优化?

作者头像
博文视点Broadview
发布2023-04-12 21:15:31
3130
发布2023-04-12 21:15:31
举报
文章被收录于专栏:博文视点Broadview

无论多么复杂的业务场景,一条数据的一生都体现在CRUD操作上——创建、查询、修改、删除。

正如人的生死轮回,数据亦是如此,一条数据随着时间的流逝,其价值也是在逐渐变小。

数据存在的价值则是在于它被使用的程度,在不同的系统中,人们对于不同时期的数据有着不同的需求。

比如12306、携程上的火车、机票订单,人们往往只关注30天之内的订单,而携程正是默认只保留30天的订单信息,超过30天的订单需要通过手机号查找。

携程订单

携程为什么要这么做?

其实仔细想想不难明白,作为全国购票平台,每年数以亿计的订单,如果全部能够开放操作(CRUD),那么系统将会瞬间崩溃。

一个订单走到终态的标志则是这笔订单的完成,也就意味着这笔订单除了查询的需求,不再任由用户修改、删除。

其实携程所用的架构方法正是:冷热分离。

什么是冷热分离?

冷热分离则是在处理数据时将数据库分为热库和冷库两个库。冷库存放的是走到终态的数据,热库存放的是还需要修改的数据。

比如30天之内的机票、火车票订单,用户可能需要对这期间的订单做出退票、开发票的操作,但是30天之前订单却只有查询的需求,因此可以将30天之内的订单放到热库中,之前的订单存放到冷库中。

那么这里又引出了两个概念,分别是:

  • 热数据:被频繁更新;响应时间有要求
  • 冷数据:不允许更新(具体业务系统具体分析),偶尔被查询;响应时间无要求。

什么情况下需要使用冷热分离?

在大型的互联网系统中,如果出现了以下场景则应该考虑冷热分离:

  1. 主业务响应延迟太大,比如12306下订单太慢了。
  2. 数据走到终态后,没有更新需求,只有读的需求,比如订单的完成状态。
  3. 用户能够接受新旧数据分开查询,比如携程的订单查询30天之前的需要用手机号查询。

“补充:当然现在有些系统不像携程那样将往期订单分开查询,但是其实内部也是做了冷热分离,只不过是在你无感知的情况下完成的。 ”

如何判断一个数据是冷数据还是热数据?

这就要根据自己的业务系统来区分了,一般而言是根据主表中的一个或者多个字段进行标识区分,比如订单的时间,这个是时间维度,可以将3个月之前的数据定义为冷数据,最近3个月的数据定义为热数据。

当然也可以是状态维度,比如订单的状态,已完结的订单定义为冷数据,未完结的订单定义为热数据。

同样的也可以将时间维度和状态维度组合起来,比如下单时间大于3个月且订单状态为已完结的定义为冷数据,反则为热数据。

“总之,根据自己业务需求,具体问题具体分析。 ”

但是需要注意以下两点:

  1. 如果一个数据被标识为冷数据,业务代码不会再对它进行写操作
  2. 不会同时存在读冷/热数据的需求。

如何实现冷热数据分离?

一切的理论知识都要经过实战的检验,基础知识了解了,那么如何实现冷热数据的分离呢?下面介绍三种常见的方法。

1. 业务代码修改

这种方案是直接修改业务代码,对代码的侵入性比较高,无法按照时间进行区分,在数据修改时触发冷热分离。

该种方案需要在业务代码层面判断是否需要冷热分离,比如订单的状态修改,一旦状态为终态则将这条数据标记为冷数据,然后触发冷热处理,将其写入冷库,同时删除热库中的这笔数据。

2、监听数据库日志

该种方案需要监听binlog日志的方式进行触发,比如订单状态修改了,则触发冷热分离。

同样的这里无法按照时间区分,但是对代码无侵入。

监听binlog日志的工具有很多,前面介绍过,比如阿里的canal,还有其他的开源中间件可供选择,如下:

对于MySQL数据库建议选择canal,使用方式看:实战!Spring Boot 整合 阿里开源中间件 Canal 实现数据增量同步!

整个流程如下图:

3、定时任务扫描

该种方案可以按照时间区分,与业务代码解耦,是个不错的选择。

流程如下:

总结

解决读写缓慢的问题冷热分离是个不错的选择,上述介绍了三种方案实现冷热分离,虽说都能实现,但是仍然要考虑诸多问题,最棘手的问题就是数据一致性的问题。

在冷热分离的处理逻辑中一定要保证热库、冷库中的数据一致性问题,手段很多,这里就不再过多介绍了。

相关图书推荐

▊《深入理解MySQL主从原理》

高鹏 著

  • 数位数据库专家/ACEDirector/ACE赞誉推荐
  • 凝结数百次故障诊断经验
  • 从主库端到从库端带你深入解析MySQL主从构架的运行原理

在超大规模流量的分布式系统环境下,无论是从系统性能的角度,还是从数据安全性的角度,掌握MySQL主从原理,都是当下技术人员的必备基本功。MySQL主从原理是高可用架构的基石,即便是MGR这种集群架构也可以看到主从的影子。要解决一个问题或者故障,最快的方式就是了解它的原理,快速定位问题。本书从源码层面抽丝剥茧般地描述MySQL主从原理,全面地介绍了GTID相关的知识点,并解析了主要Event的生成、作用和格式,以及线程的初步知识、MDL LOCK、排序等热门话题和主从相关的案例。无论是MySQL DBA和MySQL源码爱好者,还是刚进入数据库行业的小白读者,通过阅读本书,都能通过源码级分析,更好地理解和使用MySQL主从复制技术。

(扫码可购!)

▊《SQL编程思想:基于 5 种主流数据库代码实现》

董旭阳  著

  • 基于全新标准,解锁前沿SQL技能
  • 内容全面覆盖,掌握主流SQL实现
  • 融合十多年数据库管理与开发经验,一次搞定5种主流数据库
  • 实用且高效,更有超多SQL编程思想

本书基于作者十多年的工作经验和知识分享,全面覆盖了从SQL基础查询到高级分析、从数据库设计到查询优化等内容,通过循序渐进的方式和简单易懂的案例分析,透彻讲解了每个SQL知识点。本书采用了全新的SQL:2019标准,紧跟产业发展趋势,帮助读者解锁最前沿的SQL技能,同时提供了5种主流数据库的实现和差异。最后,本书还介绍了全新的SQL:2019标准对文档存储(JSON)、行模式识别(MATCH_RECOGNIZE)、多维数组(SQL/MDA)以及图形存储(SQL/PGQ)的支持。

(扫码可购!)

▊《SQL数据分析:从基础破冰到面试题解》

王大伟  著

  • 夯实SQL核心知识点
  • SQL数据分析笔试/面试避坑指南
  • 精选48个SQL常考题目解析
  • 提供配套代码下载

本书是一本关于SQL数据分析的实战手册,首先展现了数据分析工作的日常内容,给出了数据分析岗位的工作技能要求,然后讲述了数据分析笔试与面试中对SQL的考查知识点。为了使读者满足数据分析岗位关于SQL的能力要求且快速上手数据分析工作,本书从搭建SQL环境讲起,从基础到进阶,讲述经常考查的SQL语法知识,并在最后3章配合大量数据分析的SQL题目,将题目难度分为初、中、高级,给出具体习题与参考解析,让读者通过实战练习,掌握数据分析岗位招聘中对SQL的考查重难点和数据分析工作中SQL的使用。

(扫码可购!)

代码语言:javascript
复制
 如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连
 热文推荐  
微软4000亿收购动视暴雪,背后逻辑是什么?
盘点冬奥会上的那些“黑科技”!
书单 | 开年重磅新书,带你开心充实地过大年!
大写的服气!这本技术书竟然成功进军娱乐圈
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是冷热分离?
  • 什么情况下需要使用冷热分离?
  • 如何判断一个数据是冷数据还是热数据?
  • 如何实现冷热数据分离?
    • 1. 业务代码修改
      • 2、监听数据库日志
        • 3、定时任务扫描
        • 总结
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档