中間件--ClickHouse-10--海量數據存儲如何抉擇ClickHouse和ES?

在Mysql數據存儲或性能瓶頸時,采用冷熱數據分離的方式通常是一種選擇。ClickHouse和Elasticsearch(ES)是兩個常用的組件,但具體使用哪種組件取決于冷數據的存儲目的、查詢模式和業務需求等方面。

1、核心對比

(1)、ClickHouse

  • 適用場景:
    • OLAP分析:適合需要快速處理大規模數據的聚合查詢(如統計、分析歷史數據)。
    • 結構化數據:適合高度結構化的數據(如日志、訂單、交易記錄等)。
    • 列式存儲:列式存儲設計使其在聚合查詢(如SUM, COUNT, GROUP BY)中性能極佳。
    • 批量寫入:適合批量導入冷數據(如定時任務遷移的批量數據)。
  • 優點:
    • 查詢性能:在復雜分析場景中顯著優于MySQL和ES。
    • 擴展性:支持水平擴展,適合處理PB級數據。
    • 成本:開源免費,硬件成本可控(但需優化配置)。
    • 高效的壓縮率,減少存儲成本。
  • 缺點:
    • 寫入模式:不擅長高頻率的小批量寫入(適合批量導入冷數據)。
    • 事務支持:不支持傳統事務,適合分析型場景。
    • 學習成本:SQL語法和生態相對復雜。
    • 數據更新操作(如刪除、修改)效率較低。

(2)、Elasticsearch (ES)

  • 適用場景:
    • 全文搜索:適合需要快速全文檢索的場景(如日志、文本內容搜索)。
    • 實時分析:適合半結構化數據(如日志、JSON文檔)的實時查詢和統計。
    • 高并發寫入:支持高吞吐量的寫入(如實時日志收集)。
  • 優點:
    • 全文檢索:強大的全文搜索和模糊匹配能力。
    • 實時性:數據寫入后可立即查詢,適合近實時分析。
    • 靈活性:支持動態Schema,適合非結構化或半結構化數據。
    • 擴展性:分布式架構,易于水平擴展。
  • 缺點:
    • 聚合性能:復雜聚合查詢(如多維度統計)可能不如ClickHouse高效。
    • 存儲成本:存儲成本較高(需較多資源存儲倒排索引)。
    • 數據模型限制:不適合強事務和復雜關聯查詢。

2、冷數據存儲的典型場景選擇

(1)、選擇ClickHouse的場景

  • 冷數據用途:
    需要頻繁的聚合分析(如統計過去一年的用戶行為、訂單趨勢、日志分析等)。
  • 數據類型:
    結構化數據(如訂單表、日志表、交易記錄等)。
  • 示例:
    • 將MySQL中超過6個月的訂單數據遷移到ClickHouse,用于生成歷史銷售報告。
    • 將系統日志數據存入ClickHouse,用于分析用戶行為趨勢。

(2)、選擇ES的場景

  • 冷數據用途:
    需要全文搜索或實時日志分析(如日志檢索、文本內容分析)。
    • 例如:搜索過去一年中包含特定關鍵詞的日志條目。
  • 數據類型:
    非結構化或半結構化數據(如日志、JSON文檔、文本內容等)。
  • 示例:
    • 將MySQL中歷史聊天記錄遷移到ES,支持用戶搜索歷史對話中的關鍵詞。
    • 將系統日志存入ES,用于快速定位錯誤日志。

(3)、混合使用場景

  • 冷數據同時需要分析和搜索:
    可將結構化數據(如訂單金額、用戶ID)存入ClickHouse,非結構化數據(如訂單備注、日志內容)存入ES。
  • 分層存儲:
    • 熱數據:MySQL(實時事務處理)。
    • 冷數據:
      • ClickHouse(結構化數據(如:具體的數值,金額,年齡等)的分析)。
      • ES(非結構化數據(文檔,文本,JSON)的搜索)。

3、冷數據遷移方案設計

(1)、定義冷數據規則:

  • 時間維度:如超過6個月未更新的數據。
  • 訪問頻率:如過去3個月未被查詢的數據。

(2)、數據遷移工具:

  • ClickHouse:使用clickhouse-copier或自定義ETL工具批量導入。
  • ES:使用Logstash或Bulk API批量導入。

(3)、查詢邏輯改造:

  • 業務查詢時,優先查詢MySQL(熱數據),若未命中則查詢冷數據源(ClickHouse/ES)。

4、具體場景示例

場景:電商平臺訂單數據

  • 熱數據:
    MySQL存儲最近3個月的訂單數據,用于實時下單、支付等操作。
  • 冷數據:
    • ClickHouse:存儲超過3個月的訂單數據,用于生成銷售報告(如按地區統計GMV)。
    • ES:存儲訂單備注中的文本內容,支持用戶搜索歷史訂單中的關鍵詞(如“紅色T恤”)。

技術選型依據:

  • ClickHouse:
    訂單金額、用戶ID、時間戳等結構化數據的聚合分析(如SUM(order_amount))。
  • ES:
    訂單備注、用戶評價等文本內容的全文檢索。

5、ClickHouse和ES建議對比

在這里插入圖片描述

6、其他替代組件的推薦

(1)、對象存儲(如AWS S3、阿里云OSS)

適用場景:

  • 歸檔類冷數據:長期存儲(如1年以上)且極少訪問的數據。
  • 低成本存儲:通過Parquet、ORC 等列式格式存儲,配合Spark/Flink進行批量分析。

優勢:

  • 存儲成本低,適合冷數據的長期歸檔。
  • 適合離線分析(如生成月報、年報)。

(2)、HBase或HDFS

適用場景:

  • 半結構化/非結構化數據:如日志、事件日志、需要高擴展性的冷數據。
  • 時序數據:通過時間戳分區存儲,支持范圍查詢。

優勢:

  • HBase支持高并發讀寫,適合部分冷數據仍需少量更新的場景。
  • HDFS適合離線批處理(如 Hadoop 分析)。

(3)、分布式數據庫(如TiDB、CockroachDB)

適用場景:

  • 混合冷熱數據:需要同時支持 OLTP(熱數據)和 OLAP(冷數據)的場景。
  • 強一致性要求:冷數據仍需少量更新或跨庫事務。

優勢:

  • 自動水平擴展,支持 HTAP(混合事務與分析處理)。

(4)、時序數據庫(如 InfluxDB、TimescaleDB)

適用場景:

  • 時間序列數據:如 IoT 設備數據、監控指標、傳感器數據。
  • 按時間范圍查詢:支持自動過期(TTL)和壓縮。

優勢:

  • 針對時序數據優化,查詢效率高,存儲成本低。

7、其他組件對比

在這里插入圖片描述

8、最佳實踐建議

(1)、根據冷數據的用途選擇組件

  • 僅需分析(如報表、趨勢) → ClickHouse
  • 需要搜索或全文檢索(如日志、評論) → ES
  • 長期歸檔且極少訪問 → 對象存儲(S3)
  • 時間序列數據(按時間查詢) → InfluxDB

(2)、混合架構方案

  • 熱數據:保留在 MySQL(或分庫分表優化)。
  • 冷數據:
    • 分析需求 → ClickHouse(主) + 對象存儲S3(歸檔)。
    • 搜索需求 → ES(主) + 對象存儲S3(歸檔)。

(3)、數據遷移策略

  • 觸發條件:
    • 時間維度(如3個月前)或狀態維度(如訂單已完結)。
    • 可通過定時任務或觸發器遷移。
  • 遷移工具:
    • MySQL → ClickHouse:用INSERT SELECT或工具(如 Maxwell、Debezium)。
    • MySQL → ES:用Logstash、Flink 或自定義ETL。

(4)、成本優化

  • 存儲分層:
    • 熱數據 → SSD 存儲(高性能 MySQL 實例)。
    • 冷數據 → HDD 存儲(低成本 ClickHouse 集群或對象存儲)。

逆風成長,Dare To Be!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80103.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器運維:服務器流量的二八法則是什么意思?

文章目錄 用戶行為角度時間分布角度應用場景角度 服務器流量的二八法則,又稱 80/20 法則,源自意大利經濟學家帕累托提出的帕累托法則,該法則指出在很多情況下,80% 的結果是由 20% 的因素所決定的。在服務器流量領域,二…

springboot對接豆包大模型

文檔地址: 豆包大模型-火山引擎 模型廣場地址: 賬號登錄-火山引擎 首先來到模型廣場,選取你需要的模型,我這邊要做圖片理解的應用,所以選用了Doubao-1.5.vision-pro. 點立即體驗,進入一個新的頁面,可以上傳圖片,然后…

數據通信學習筆記之OSPF其他內容3

對發送的 LSA 進行過濾 當兩臺路由器之間存在多條鏈路時,可以在某些鏈路上通過對發送的 LSA 進行過濾,減少不必要的重傳,節省帶寬資源。 通過對 OSPF 接口出方向的 LSA 進行過濾可以不向鄰居發送無用的 LSA,從而減少鄰居 LSDB 的…

智能安全用電系統預防電氣線路老化、線路或設備絕緣故障

智能安全用電系統預防電氣線路老化、線路或設備絕緣故障 智能安全用電系統,猶如一位忠實而敏銳的衛士,主要針對低壓供電網中一系列潛在的危險狀況進行了全方位且行之有效的預防和保護。 智能安全用電系統在低壓供電網這個復雜的體系中,電氣線…

使用Intel Advisor工具分析程序

使用Intel Advisor工具分析程序 Intel Advisor是一款性能分析工具,主要用于識別代碼中的向量化機會、線程化和內存訪問模式等問題。以下是使用Intel Advisor分析程序的基本步驟: 安裝與準備 從Intel官網下載并安裝Intel Advisor(通常作為I…

【UniApp】Vue2 scss 預編譯器默認已由 node-sass 更換為 dart-sass

從 HBuilderX 4.56 ,vue2 項目也將默認使用 dart-sass 預編譯器。 vue2開發者sass預處理注意: sass的預處理器,早年使用node-sass,也就是vue2最初默認的編譯器。 sass官方推出了dart-sass來替代。node-sass已經停維很久了。 另…

智慧能源安全新紀元:當能源監測遇上視頻聯網的無限可能

引言:在數字化浪潮席卷全球的今天,能源安全已成為國家安全戰略的重要組成部分。如何構建更加智能、高效的能源安全保障體系?能源安全監測平臺與視頻監控聯網平臺的深度融合,正為我們開啟一扇通向未來能源管理新世界的大門。這種創…

C++游戲服務器開發之⑦redis的使用

目錄 1.當前進度 2.守護進程 3.進程監控 4.玩家姓名添加文件 5.文件刪除玩家姓名 6.redis安裝 7.redis存取命令 8.redis鏈表存取 9.redis程序結構 10.hiredisAPI使用 11.基于redis查找玩家姓名 12.MAKEFILE編寫 13.游戲業務實現總結 1.當前進度 2.守護進程 3.進程監…

db中查詢關于null的sql該怎么寫

正確示例 # 等于null select * from 表名 where 字段名 is NULL; # 不等于null select * from 表名 where 字段名 is not NULL;若需要同時判斷字段不等于某個值且不為null select * from users where age ! 30 and age is not null; select * from users where age ! 30 or a…

從“堆料競賽”到“體驗深耕”,X200 Ultra和X200s打響手機價值升維戰

出品 | 何璽 排版 | 葉媛 vivo雙旗艦來襲! 4月21日,vivo X系列春季新品發布會盛大開啟,帶來了一場科技與創新的盛宴。會上,消費者期待已久的X200 Ultra及X200s兩款旗艦新品正式發布。 vivo兩款旗艦新品發布后,其打破…

多模態大語言模型arxiv論文略讀(三十二)

Proximity QA: Unleashing the Power of Multi-Modal Large Language Models for Spatial Proximity Analysis ?? 論文標題:Proximity QA: Unleashing the Power of Multi-Modal Large Language Models for Spatial Proximity Analysis ?? 論文作者&#xff1a…

基于貝葉斯優化的Transformer多輸入單輸出回歸預測模型Bayes-Transformer【MATLAB】

Bayes-Transformer 在機器學習和深度學習領域,Transformer模型已經廣泛應用于自然語言處理、圖像識別、時間序列預測等多個領域。然而,在一些實際應用中,我們面臨著如何高效地優化模型超參數的問題。貝葉斯優化(Bayesian Optimiz…

Ruby 正則表達式

Ruby 正則表達式 引言 正則表達式(Regular Expression,簡稱Regex)是一種強大的文本處理工具,在編程和數據處理中有著廣泛的應用。Ruby 作為一種動態、靈活的編程語言,同樣內置了強大的正則表達式功能。本文將詳細介紹…

kubernetes》》k8s》》刪除命名空間

使用 kubectl delete ns 命名空間 --force --grace-period0 如果還刪除不掉 需要 kubectl get namespace 命名空間 -o json > x.json vim x.json kubectl replace --raw “/api/v1/namespaces/命名空間/finalize” -f ./x.json

玩轉Docker | 使用Docker部署DashMachine個人書簽工具

玩轉Docker | 使用Docker部署DashMachine個人書簽工具 前言一、DashMachine介紹DashMachine簡介DashMachine使用場景二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署DashMachine服務下載鏡像創建容器創建容器檢查容器狀態檢查服務端口安全設置四、訪問Das…

SQL進階知識:一、高級查詢

今天介紹下關于高級查詢的詳細介紹,包括子查詢、連接查詢、分組查詢等,并結合MySQL數據庫提供實際例子。 一、子查詢(Subqueries) 子查詢是嵌套在另一個查詢中的查詢語句,通常用于提供條件過濾、生成臨時數據集等。子…

【Git】Git Revert 命令詳解

Git Revert 命令詳解 1. Git Revert 的基本概念 Git Revert 是一個用于撤銷特定提交的命令。與 Git Reset 不同,Git Revert 不會更改提交歷史,而是會創建一個新的提交來撤銷指定提交的更改。這意味著,使用 Git Revert 后,項目的…

華為S系列交換機CPU占用率高問題排查與解決方案

問題概述 在華為S系列交換機(V100&V200版本)運行過程中,CPU占用率過高是一個常見問題,可能導致設備性能下降甚至業務中斷。根據華為官方維護寶典,導致CPU占用率高的主要原因可分為四大類:網絡攻擊、網絡震蕩、網絡環路和硬件…

招募隊員問題

#include <bits/stdc.h> using namespace std;int main() {int n;cin >> n; // 輸入隊伍人數&#xff08;行數&#xff09;vector<int> maxx(5, 0); // 用于記錄每個數字&#xff08;1~5&#xff09;出現的最大連續段長度// 定義二維數組 team&#xff0c;n …

2025.04.19react面試題

以下是整理的 20 道 React 面試題&#xff0c;涵蓋基礎、進階和實戰應用&#xff0c;適用于社招或內推準備&#xff1a; 一、React 基礎&#xff08;適合初中級&#xff09; React 中的組件有哪幾種&#xff1f;它們有什么區別&#xff1f; 什么是 JSX&#xff1f;它與 HTML 有…