大数据高并发核心场景实战 - 数据持久化之冷热分离

当云计算平台的业务后台处理工单突然接入客服系统的请求洪流,每日新增10万工单,3000万主表+1.5亿明细表的数据库开始呻吟——是时候请出「冷热分离」这剂退烧药了!


一、业务场景:工单表的生死时速

日均10万工单增长
主表3000万+
明细表1.5亿+
查询响应>2s
业务人员投诉暴增

核心痛点

  • 热数据(最近3个月工单)仅占总量20%,却承担80%读写
  • 历史工单(冷数据)像仓库积压货,拖慢整个系统效率

二、踩坑记:数据库分区的幻灭

曾天真地以为分区是银弹:

-- 按时间分区的美好设想
ALTER TABLE tickets PARTITION BY RANGE(YEAR(create_time)) (PARTITION p2023 VALUES LESS THAN (2024),PARTITION p2024 VALUES LESS THAN (2025)
);

现实暴击

  1. 致命限制:分区字段必须是主键组成部分 → 需将create_time加入复合主键
  2. 查询失灵:业务接口缺少统一分区字段过滤条件
  3. 运维黑洞:跨分区查询性能反而雪崩

💡 结论:当查询无法命中分区键时,分区如同给破车装火箭引擎——徒增复杂度!


三、冷热分离:给数据库做“冰箱冷冻术”

3.1 冷热判定法则

已关闭
>30天
工单状态
冷数据候选
最后处理时间
冷数据盖章

判定标准status='CLOSED' AND last_process_time < NOW()-30d


3.2 分离触发三剑客

方式优点缺点适用场景
修改业务代码实时精准耦合高,改造成本大新系统
监听Binlog解耦,近实时无法按时间触发高实时性要求
定时扫描零侵入,天然按时间延迟分钟级存量系统改造

我们选择定时扫描:凌晨低峰期执行,避免影响客服白天作战


3.3 分离操作原子三连

定时任务 热数据库 冷数据库 1. 锁定待迁移数据 返回锁定ID列表 2. 插入冷库(幂等操作) 插入成功 3. 删除热库数据 定时任务 热数据库 冷数据库

四、高并发迁移的三大生死关

4.1 批量处理的艺术

线程池配置

ThreadPoolExecutor executor = new ThreadPoolExecutor(10, // 常驻10个迁移战士10,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(100) // 等待队列容量
);

迁移策略

  • 单线程批量迁移 → 测试最佳batch size(我们测得500条/批最快)
  • 总量>5000时 → 唤醒线程池并发作战

4.2 锁的攻防战

加锁SQL的精妙设计

UPDATE tickets 
SET lock_thread = #{threadId}, lock_time = NOW() 
WHERE status = 'CLOSED' AND last_process_time < #{coldTime}AND (lock_thread IS NULL OR lock_time < #{timeout})

锁机制三原则

  1. 原子锁:利用UPDATE行锁特性
  2. 双检一致性:操作前二次验证锁持有者
  3. 超时兜底:设置5分钟超时,防线程僵死

⚠️ 血泪教训:某次未设超时,迁移线程OOM后→ 10万工单被锁死1小时!

背后的计算机原理

获取行锁
等待行锁释放
MVCC多版本控制
防止幻读
事务1
数据行X
事务2
InnoDB引擎
避免脏读
间隙锁
范围查询安全

锁机制三原则的底层逻辑

  1. 原子锁

    • 利用InnoDB的排他锁(X锁)机制
    • UPDATE语句执行时自动获取行锁,阻塞其他写操作
    • 通过WHERE条件实现CAS(Compare And Set)操作
  2. 双检一致性

    // 伪代码展示双重检查
    List<Long> lockedIds = executeUpdateLockSql(); // 步骤1:加锁
    List<Ticket> tickets = query("SELECT * WHERE id IN (:ids) AND lock_thread=currentId"); // 步骤2:验证
    if(tickets.size() != lockedIds.size()) {// 存在锁竞争失败的数据rollbackUnlockedTickets(); 
    }
    
  3. 超时兜底

    • 基于lock_time字段实现lease机制(租约锁)
    • 超时时间 = 平均处理时间 × 3 + 缓冲时间(我们设置5分钟)
    • 后台线程每分钟扫描lock_time < NOW()-5min的僵尸锁

4.3 失败重试的生存法则

保证最终一致性的三板斧

  1. 幂等插入INSERT INTO cold_table ... ON DUPLICATE KEY UPDATE
  2. 删除校验:删除热数据前检查冷库存在记录
  3. 异常监听:捕获失败工单,人工干预兜底

📌 真理时刻:冷热分离后,热表查询速度从2.1s→0.2s,业务人员笑容增加50%!


五、冷热分离二期:冷库迁入HBase

当冷数据突破亿级时,MySQL冷库开始颤抖 → 启用HBase方案

HBase作战地图

时间倒序+工单ID
工单数据
RowKey设计
Region分区
RegionServer1
RegionServer2
MemStore写缓存
MemStore写缓存
HFile持久化

列族设计禁忌

# 反面教材(导致Region分裂灾难)
create 'tickets', {NAME => 'base_info', VERSIONS => 1},   // 基础信息{NAME => 'process_log', VERSIONS => 10} // 处理日志 → 巨大字段!

优化为

  • 基础信息存HBase
  • 处理日志转存Elasticsearch

六、什么情况下别用冷热分离?

当遇到以下场景时请紧急刹车:

mindmaproot((慎用场景))工单频繁修改 → 冷热反复横跳需要跨冷热数据关联查询 → 性能黑洞实时统计全量数据 → 冷热双查不如直接OLAP

在这里插入图片描述


七、总结:冷热分离的生存法则

  1. 判断准:用业务状态+时间双标识锁定冷数据
  2. 触发稳:存量系统首选定时扫描触发
  3. 迁移快:并发批量处理+智能锁机制
  4. 存得省:亿级冷数据交给HBase/OSS
  5. 查得快:热库轻装上阵,冷库按需访问

🚀 终极奥义:让热数据在MySQL战场冲锋,送冷数据去HBase养老院安度晚年!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84519.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84519.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84519.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI Study】第四天,Pandas(6)- 性能优化

文章概要 本文详细介绍 Pandas 的性能优化技术&#xff0c;包括&#xff1a; 内存优化计算优化大数据处理实际应用示例 内存优化 数据类型优化 # 查看数据类型 df.dtypes# 查看内存使用情况 df.memory_usage(deepTrue)# 优化数值类型 # 将 float64 转换为 float32 df[floa…

c++系列之智能指针的使用

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 智能指针的使用及原理 AII&#xff08;Resource Acquisition Is Initializatio…

知识蒸馏(Knowledge Distillation, KD)

知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模型压缩与知识迁移技术&#xff0c;通过让小型学生模型&#xff08;Student&#xff09;模仿大型教师模型&#xff08;Teacher&#xff09;的行为&#xff08;如输出概率分布或中间特征表示&#xff09;&…

chatGPT 会扩大失业潮吗?

击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 对于部分人而言&#xff0c;失业是必然趋势。 这不&#xff0c;身后的一测试大哥&#xff0c;自从公司解散之后&#xff0c;已经在家待业半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基础 -- Verilog行为级建模之时序控制

Verilog 行为级建模&#xff08;Behavioral Modeling&#xff09;中“时序控制”机制的系统化由浅入深培训内容&#xff0c;适用于初学者到进阶 FPGA 设计工程师的学习路径。 &#x1f3af; 一、行为级建模的定位 行为级建模&#xff08;Behavioral Modeling&#xff09;是 Ve…

设计模式精讲 Day 7:桥接模式(Bridge Pattern)

【设计模式精讲 Day 7】桥接模式&#xff08;Bridge Pattern&#xff09; 文章简述 在软件系统中&#xff0c;类的继承关系往往会导致类爆炸&#xff0c;尤其是在需要组合多种功能或行为时。桥接模式&#xff08;Bridge Pattern&#xff09;通过将抽象部分与其实现部分分离&am…

Apipost 签约锐捷网络:AI赋能,共推 ICT 领域 API 生态智能化升级

日前&#xff0c;北京北极狐信息科技有限公司&#xff08;简称 “北极狐科技”&#xff09;与锐捷网络股份有限公司&#xff08;简称 “锐捷网络”&#xff09;正式签署合作协议&#xff0c;双方将聚焦 ICT 基础设施及解决方案领域&#xff0c;围绕 API 全链路管理与智能化研发…

RK3568笔记八十三:RTMP推流H264和PCM

若该文为原创文章,转载请注明原文出处。 前面有通过勇哥,实现了RTMP推流,但一直想加上音频,所以经过测试,写了一个demo, ffmpeg是使用ubuntu下安装测试的。 安装参考:Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源码编译安装_ubuntu安装libx264-CSDN博客 记录:实现从…

产业园智慧化升级中 DDC 楼宇自控系统的集成应用优势:多业态协同与能源可视化管控​

摘要​ 在产业园智慧化升级浪潮中&#xff0c;直接数字控制&#xff08;DDC&#xff09;系统凭借强大的集成能力&#xff0c;成为实现多业态协同与能源可视化管控的核心技术。本文深入剖析 DDC 系统在整合园区多元业态、优化能源管理方面的独特优势&#xff0c;通过系统集成打…

Vue 3瀑布流组件实现详解 - 图片展示方案

引言&#xff1a;瀑布流布局的魅力与应用场景 在当今富媒体内容主导的网络环境中&#xff0c;瀑布流布局已成为展示图片商品等内容的流行方式。它通过动态布局算法在有限空间内最大化内容展示&#xff0c;提供视觉连续性和流畅浏览体验。本文将深入探讨如何使用Vue 3实现一个功…

如何确保邮件内容符合反垃圾邮件规范?

一、遵守相关法规 美国《CAN-SPAM法案》规定&#xff0c;邮件头信息必须真实准确&#xff0c;要标明广告性质、提供有效地址&#xff0c;并在 10 个工作日内响应退订请求。 欧盟《通用数据保护条例》&#xff08;GDPR&#xff09;强调获得用户明确同意&#xff0c;数据使用要…

MQ解决高并发下订单问题,实现流量削峰

文章目录 示例&#xff1a;电商秒杀系统中的流量削峰1. 依赖引入&#xff08;Maven&#xff09;2. 消息队列配置&#xff08;RabbitMQ&#xff09;3. 生产者&#xff1a;订单服务&#xff08;接收高并发请求&#xff09;4. 消费者&#xff1a;库存服务&#xff08;按系统容量处…

【二进制安全作业】250616课上作业2 - 栈溢出漏洞利用

文章目录 前言一、使用环境二、程序源码1. C语言源码2. 编译方式 三、源码分析四、反汇编分析1. 检查文件安全性2. 查找目标函数3. 计算偏移量4. 绕过 strlen5. 绕过 if 五、编写EXP结语 前言 直接进入正题 一、使用环境 处理器架构&#xff1a;x86_64 操作系统&#xff1a;U…

Python类型处理与推导式

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 1 引言2 类型处理3 高效操作AI开发常见数据结构3…

数据库char字段做trim之后查询很慢的解决方式

select * from TABLE0 where trim(column1):param 当表数据量大时&#xff0c;即使给column1字段加上索引&#xff0c;这条查询语句也会很慢。 因为使用trim函数后&#xff0c;column1的索引会失效&#xff0c;有两种处理方法&#xff1a; 1.给表加上trim(column1)函数索引 …

Kafka核心架构解析:从CAP理论到消息可靠性的设计哲学

摘要 本文从分布式系统CAP理论和消息可靠性两个视角深入解析Kafka的架构设计&#xff0c;通过概念关系图和组件交互图揭示其核心设计思想&#xff0c;并详细拆解各组件功能与协作机制。文章包含完整的交互流程分析和配置参数说明&#xff0c;是理解Kafka设计精髓的实用指南。 一…

LeetCode 275.H指数 II

题目&#xff1a; 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数&#xff0c;citations 已经按照 非降序排列 。计算并返回该研究者的 h 指数。 h 指数的定义&#xff1a;h 代表“高引用次数”&#xff08;high citations&…

OV汽车摄像头cmos sensor 相关情况介绍

OV汽车摄像头cmos sensor 相关情况介绍 文章目录 OV汽车摄像头cmos sensor 相关情况介绍**1. 汽车摄像头三大场景应用****2. 车载CMOS SENSOR的核心技术****3. 两大车规认证:实现真正的车规可靠性****4. 最新产品**2022年,汽车智能化加码提速,被誉为“智能驾驶之眼”的车载摄…

Pinia在多步骤表单中的实践应用

引言 Pinia是Vue 3推荐的状态管理库&#xff0c;相比Vuex提供了更简洁的API、更好的TypeScript支持和更灵活的组合式风格。本文基于实际项目代码&#xff0c;详细介绍Pinia在多步骤表单场景中的应用方法。 1. Pinia Store的创建与设计 1.1 基础Store结构 在src/store/modul…