首页 > 数据库 >数据库优化学习笔记_冷热分离

数据库优化学习笔记_冷热分离

时间:2022-10-12 13:37:21浏览次数:54  
标签:canal 冷热 分离 业务 笔记 MySQL 数据 数据库

冷热分离

当数据库表数据体量大,即使是做了很多SQL层面的优化(索引、执行计划、优化语句、表结构设计)读写依然很慢可以考虑从冷热数据分离去提高速度

热数据:对用户而言,是需要经常用到的数据。从数据获取后需要快速反应面向用户/系统使用,数据需要保持质量和稳定、有效。

    在数据处理层面上也是优先的。

    比如:在订单系统中,还未完成的订单中的数据可以认为是热数据,及时反应给用户/系统作查询比对处理

 

冷数据:不是经常用到的。也可以是历史数据,对业务进度影响不大,可以用做离线处理的数据。

    比如:订单中已经完成的数据,我们需要对订单数据做聚合统计,订单庞大,统计分析时间长,但是无需给用户做出立刻的反应。

 

冷热分离:冷数据和热数据的最终形态(通过一系列业务处理后)存放在冷库和热库中,分别存储。

 

注意:

冷热分离数据的特效有:

1) 如果一个数据被标记为冷数据,我们可以认为:我们不会对它再进行业务操作(UPDATE、DELETE操作)

2) 不会同时的对冷热数据进行读取操作

冷热分离确实可以在某种程度上解决写读写数据慢的问题,但是仍然存在诸多不足。具体表现有:
1)用户查询冷数据速度依旧很慢。
2)由于冷数据多到一定程度,业务就无法再修改冷数据,因为数据量太大系统承受不住。

 

实现方案1:修改业务代码

   

在业务层就去判断冷热数据,触发分离,可以使用触发器等。(同步/异步根据业务逻辑进行具体考量)

比如TIMESTAMPDIFF某个字段到现在已经有一定的时间了,可以认为他是冷数据,我们就从热库中删除,在冷库中写入,

从而减少了热库的数据量。但缺点就是需要不断的运行维护,对代码的侵入性比较高。

 

 

实现方案2:CDC(Change Data Capture 变更数据获取)

监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT、更新UPDATE、删除DELETE等)

将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。

 

基于查询的CDC:Sqoop、Kafka JDBC source等(后面学习)

基于Binlog的CDC:Canal、Debezium等

canal 作为 MySQL binlog 增量获取和解析工具,可将变更记录投递到 MQ 系统中,比如 Kafka/RocketMQ,可以借助于 MQ 的多语言能力(主要用于解决异构通信问题)。

 

MySQL主备复制原理

 

 

Mysql的Master将数据变更写入binlog,Slave就将binlog拷贝到Slave的中继日志relaylog,通过relaylog同步做到主从备份

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

 

 

实现方案3:定时任务扫描

通常使用Springboot的Quartz 或者 Python的Schedule库写脚本,来对库表数据进行定时扫描和处理,

当条件满足后做数据状态的变更或者产生新的数据插入到表中。

 

 

这个有很多考量,值得后面再去应对业务深挖。

 

 

 

总结:解决读写缓慢冷热分离是个有效的手段,但是数据一致性如何保证也是一个问题

 

 

 

 

 

 

 

 


 

 

标签:canal,冷热,分离,业务,笔记,MySQL,数据,数据库
From: https://www.cnblogs.com/leehl8016/p/16784142.html

相关文章

  • 判断机器类型(台式机,笔记本. . .)
    3是台式机,10是笔记本,其他的看链接。https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure?redirectedfrom=MSDNtype:=cmdSilenceRetu......
  • 电脑还能这样做笔记?来看看笔记软件上隐藏的分类功能
    对于不少经常使用电脑来学习或工作的网友来说,如果能够直接在电脑上记录各类笔记内容是非常方便的,那么如何在电脑上做笔记呢?有的人表示想要在电脑上做笔记,可以直接用Word来......
  • 图像处理学习笔记-05-图像复原与重建2
    估计退化函数图像观察估计首先观察图像的一个小矩形区域,之后处理子图像得到想要的结果,得到一个子图像的原图像估计之后通过下式:\[H_s(u,v)=\frac{G_s(u,v)}{\hat{F}_s......
  • 单调栈与单调队列复习笔记
    简介有时候,我们让栈/队列中的所有元素满足单调,然后处理会比较方便。P2947[USACO09MAR]LookUpS给出一个长度为\(N\)的序列\(A\),求出一个序列\(P\),使得\(P_i\)......
  • 收藏!想要拿到高薪Offer,数据库程序员要知道的几件事儿!
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 导语:想找到一份程序员的工作,一......
  • 前端笔记_2_layer加载背景
    varindex=layer.load(1,{shade:[0.6,'#000']//0.1透明度的白色背景});$.ajax({url:apiBaseUrl+'/url',type:'post......
  • 数据库访问通用类
       usingSystem;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;namespaceDBHelper{publicclasssqlServerDBHelper......
  • 数据库的备份和还原
    1.命令行: *语法: *备份:mysqldump-u用户名-p密码数据库名称>保存的路径 *还原: 1.登录数据库 2.创建数据库 ......
  • MarkDown文件与Tyora编辑器第一次正式使用笔记
    第一次正式使用Tyora编辑器,记录MarkDown文件常用的语法。MarkDown文件后缀为.md;和文本文件一样简单,比文本文件强大,有常用的样式。Tyora编辑器可以编辑md文件,0.11.8为免费......
  • SQL分类和DDL_操作数据库_创建&查询
    SQL分类:(1)DDL(DataDefinitionLanguage)数据定义语言用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等(2)DML(DataManipulationLanguage)数据操作语言......