clickhouse(十五、存儲優化實踐)

文章目錄

  • 背景
  • 問題定位
  • 優化方式
    • 排序鍵設計
    • 寫入順序
    • 壓縮算法 DoubleDelta
    • LowCardinality
    • 避免使用Nullable
  • 總結

背景

clickhouse集群容量告警,項目中某些表占據大量的存儲空間,借此機會對ck的存儲優化進行實踐學習,并通過多種方式測試驗證優化效果。

問題定位

通過查詢系統表元數據,定位頭部存儲的表。之前的文章有具體查詢邏輯。如果能通過清理或者是控制表生命周期是最快的方式,不然就要看具體的表各列的存儲壓縮大小。以下圖為例,壓縮率在10以下的就是比較低的。
在這里插入圖片描述

優化方式

要著手優化,最好標準自然是參考官方的最佳實踐。

排序鍵設計

按基數升序排列關鍵列,能提升存儲壓縮率和查詢效率。 https://clickhouse.com/docs/en/optimize/sparse-primary-indexes#ordering-key-columns-efficiently
在這里插入圖片描述

  • hits_URL_UserID_IsRobot具有復合主鍵的表(URL, UserID, IsRobot),其中我們按基數降序排列關鍵列
  • hits_IsRobot_UserID_URL具有復合主鍵的表(IsRobot, UserID, URL),其中我們按基數按升序對鍵列進行排序

壓縮率:
在這里插入圖片描述
查詢效率:
在這里插入圖片描述
這里官方有提供效果驗證,就不在重復。

寫入順序

除了低基數列在前,通過對數據進行排序也能提升壓縮效率。 因為ck物理存儲同分區里也是分數據塊的,一個數據塊中的數據更有序也能提升存儲效率。
在這里插入圖片描述

壓縮算法 DoubleDelta

在定位問題時,我們發現唯一鍵row_key 的壓縮率不到2,一部分原因是該字段寫入ck時是亂序的,另外就是使用合適的壓縮算法。 ck默認的算法是LZ4(原理是按照4字節窗口掃描,查找與之前的值是否匹配)。但如果我們是有序是列,可以使用另外兩個壓縮算法 Delta/DoubleDelta (Delta編碼存儲一個基礎值以及后續相鄰兩個數據的差值, Double Delta是在Delta基礎上再做一次Delta,等差數列壓縮相當優秀)
我們可以看下有序和無序的數據在不同壓縮算法的差異。Double Delta再壓縮有序列效率可謂“遙遙領先”。
在這里插入圖片描述

LowCardinality

低基數建議使用LowCardinality。 相同數據(Android/IOS 枚舉)壓縮后大小差異近6倍。
在這里插入圖片描述

避免使用Nullable

相同數據沒有Nullable 壓縮率更高
在這里插入圖片描述

總結

以上是我們在優化存儲時主要嘗試的方案,具體優化還要結合業務情況來定。

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

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

相關文章

設計模式相關更新中

詳見gitee: 更新中? ??????設計模式相關: 設計模式相關介紹 (gitee.com) 一.面向對象的設計原則 二.單例模式

React(五)useEffect、useRef、useImperativeHandle、useLayoutEffect

(一)useEffect useEffect – React 中文文檔 useEffect hook用于模擬以前的class組件的生命周期,但比原本的生命周期有著更強大的功能 1.類組件的生命周期 在類組件編程時,網絡請求,訂閱等操作都是在生命周期中完成 import React, { Com…

算法題day37日(補5.23日卡:貪心算法day4)

一、刷題: 1.leetcode題目 860. 檸檬水找零 - 力扣(LeetCode)(easy): 我覺得我寫的代碼有點蠢 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:dict_ {5:0,10:0}if bills[0] !…

Python降維基礎知識:深入探索與實戰應用

Python降維基礎知識:深入探索與實戰應用 在數據分析和機器學習的廣闊領域中,降維技術一直扮演著重要的角色。Python,作為數據處理和機器學習的首選語言,為我們提供了豐富的降維工具和算法。本文將從四個方面、五個方面、六個方面…

算法訓練營第四十九天 | LeetCode 139單詞拆分

LeetCode 139 單詞拆分 基本還是完全背包的思路,不過用了三重循環,第三重循環是用于判斷當前字符串尾部指定長度字符是否和列表中某一字符串相同,是的話可以將當前dp[j]或上當前下標減去該單詞長度后的下標值。 代碼如下: clas…

平滑值(pinghua)

平滑值 題目描述 一個數組的“平滑值”定義為:相鄰兩數差的絕對值的最大值。 具體的,數組a的平滑值定義為 f ( a ) m a x i 1 n ? 1 ∣ a i 1 ? a i ∣ f(a)max_{i1}^{n-1}|a_{i1}-a_i| f(a)maxi1n?1?∣ai1??ai?∣ 現在小紅拿到了一個數組…

【前端】響應式布局筆記——flex

二、Flex Flex(FlexiableBox:彈性盒子,用于彈性布局,配合rem處理尺寸的適配問題)。 1、flex-direction:子元素在父元素盒子中的排列方式。 父級元素添加:flex-direction: row; 父級元素添加:flex-direction: row-reverse; 父…

家政預約小程序13我的訂單

目錄 1 我的訂單頁面布局2 全部訂單頁面3 完善訂單狀態4 查詢訂單信息總結 現在我們已經完成了家政預約小程序主體功能的開發,包含服務的查看,在線預約已經登錄等功能。預約之后就需要家政公司的客服進行派單,由服務人員進行上門服務。在小程…

Hotcoin精彩亮相Consensus 2024 Austin,探索行業風向標

5 月 31 日,由CoinDesk主辦的“Consensus 2024”大會在德克薩斯州的奧斯汀市正式落下帷幕。作為全球規模最大、最具影響力的加密貨幣、區塊鏈、Web3盛會,本次Consensus 2024 Austin吸引來自 100 多個國家/地區的 15,000 多名與會者、6,800 家公司、850 多…

Linux 程序守護腳本

引言 程序是由代碼形成的,代碼是由人寫的。只要是人,都會有疏忽的時候,導致寫出的程序有bug,當然最嚴重的bug就是程序閃退。 本文旨在提供一個程序守護腳本,當監測到程序閃退后,立馬將程序再起啟動&#…

java 獲取文件的MIME類型

MIME類型簡介 MIME類型(Multipurpose Internet Mail Extensions)是一種標準,用于描述文檔、文件或字節流的性質和格式。它最初是為了在電子郵件中傳輸多媒體數據而設計的,但后來也被廣泛用于Web開發中。每種MIME類型都由一個唯一…

【C++】手動模擬String底層與深淺拷貝

在string類:版本、組件、構造、操作及應用和 C中string的一些超常用函數 (附習題)這兩篇文章中我們已經了解到了string,現在讓我們再來手動實現模擬一下吧~ 模擬實現string是為了更好的理解string函數的使用和深淺拷貝方面的知識~ 總體整理了兩張思維導…

【Python編程】【Jupyter Notebook】啟動時報錯:no available port could be found

一、報錯描述 在Jupyter Notebook中編寫程序,無法運行,提示由于沒有可供監聽的端口,無法啟動Jupyter服務器,如下圖所示: 二、原因分析 通過報錯信息,猜測大概是由于網絡環境的原因。首先,關閉…

多角度剖析事務和事件的區別

事務和事件這兩個概念在不同的領域有著不同的含義,尤其是在計算機科學、數據庫管理和軟件工程中。下面從多個角度來剖析事務和事件的區別: 計算機科學與數據庫管理中的事務 事務(Transaction): 定義:在數據庫管理中&#xff0c…

C語言(結構體)

Hi~!這里是奮斗的小羊,很榮幸各位能閱讀我的文章,誠請評論指點,歡迎歡迎~~ 💥個人主頁:小羊在奮斗 💥所屬專欄:C語言 本系列文章為個人學習筆記,在這里撰寫成文一…

Java項目之消息隊列(手寫java模擬實現mq)【五、內存存儲數據,方便快速拿到數據對象】? ★

九. 內存數據結構設計 硬盤上存儲數據, 只是為了實現 “持久化” 這樣的效果. 但是實際的消息存儲/轉發, 還是主要靠內存的結 構. 對于 MQ 來說, 內存部分是更關鍵的, 內存速度更快, 可以達成更?的并發 創建 MemoryDataCenter 創建 mqserver.datacenter.MemoryDataCenter …

AIGC實戰!7個超熱門的 Midjourney 關鍵詞教程

一、剪紙風格 核心詞: paper art(剪紙藝術) 關鍵技巧: 主體物:可以換成任意主角,Chinese illustration (中國風插畫);藝術風格:paper art (剪紙…

ruoyi vue 集成積木報表真實記錄

按官方文檔集成即可 積木報表官方集成文檔 集成問題 1.注意 idea 配置的 maven 需要設置成 本地配置&#xff0c;不可以使用 idea 自帶的 maven,自帶 maven 會導致私有源調用不到 后端代碼 新建 base 模塊 maven配置 <project xmlns"http://maven.apache.org/POM/…

微軟云計算[3]之Windows Azure AppFabric

Windows Azure AppFabric AppFabric概述AppFabric關鍵技術服務總線訪問控制高速緩存 AppFabric概述 AppFabric為本地應用和云中應用提供了分布式的基礎架構服務 用戶本地應用與云應用之間進行安全聯接和信息傳遞 云應用和現有應用或服務之間的連接及跨語言、跨平臺、跨不同標…

模擬藍牙打卡機

模擬藍牙打卡&#xff0c;源碼來自github項目dingBLE 只需要一個ESP32模塊模擬藍牙打卡機&#xff0c;即可通過藍牙打卡 親測有效arduino代碼如下 打卡機的MAC和RAW數據可使用安卓app mRFconnect 掃描獲取 #include "BLEDevice.h" #include "BLEUtils.h"…