【大數據高并發核心場景實戰】 - 數據持久化之冷熱分離

大數據高并發核心場景實戰 - 數據持久化之冷熱分離

當云計算平臺的業務后臺處理工單突然接入客服系統的請求洪流,每日新增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…