
文章插圖
下面這個示例中,在 table 目錄下可以看到有 4 個子目錄,每個子目錄就是上文提到的 Part 。
$ ls -l /var/lib/clickhouse/data/<database>/<table>drwxr-xr-x2 testtest 64B Aug8 13:46 202208_1_3_0drwxr-xr-x2 testtest 64B Aug8 13:46 202208_4_6_1drwxr-xr-x2 testtest 64B Sep8 13:46 202209_1_1_0drwxr-xr-x2 testtest 64B Sep8 13:46 202209_4_4_圖示的最右邊這一列,每個子目錄的名字前面可能是一個時間,比如 202208 類似這樣的前綴,202208 其實就是 Partition 名 。Partition 名字是用戶自己來定義的,但是按照約定俗成或者一些實踐習慣,通常會使用時間來命名 。
比如,202208 這個 Partition,它會有兩個子目錄,子目錄就是 Part,一個 Partition 通常會由多個 Part 來構成 。用戶在往 ClickHoue 寫入數據時,會先寫到內存里,再根據內存里的數據結構,持久化到磁盤上 。同一個Partition 里面的數據如果比較大的話,在磁盤上就會變成很多 part 。ClickHouse 官方建議不要在一個 Table 下創建太多 Part,它會定期或者不定期地對 Part 進行合并,減少總的 Part 數量 。Merge 的概念就是合并 Part,這也是 MergeTree 這個引擎的名字來源之一 。
再通過一個例子來了解 Part 。Part 里會有很多小文件,有一些是元信息,比如索引信息,幫助用戶快速查找數據 。
$ ls -l /var/lib/clickhouse/data/<database>/<table>/202208_1_3_0-rw-r--r--1 testtest?? Aug8 14:06 ColumnA.bin-rw-r--r--1 testtest?? Aug8 14:06 ColumnA.mrk-rw-r--r--1 testtest?? Aug8 14:06 ColumnB.bin-rw-r--r--1 testtest?? Aug8 14:06 ColumnB.mrk-rw-r--r--1 testtest?? Aug8 14:06 checksums.txt-rw-r--r--1 testtest?? Aug8 14:06 columns.txt-rw-r--r--1 testtest?? Aug8 14:06 count.txt-rw-r--r--1 testtest?? Aug8 14:06 minmax_ColumnC.idx-rw-r--r--1 testtest?? Aug8 14:06 partition.dat-rw-r--r--1 testtest?? Aug8 14:06 primary.id在示例的右側,以 Column 作為前綴的這些文件是實際的數據文件,相比元信息通常會比較大 。這個示例中只有 A、B 兩列,實際的表里可能有很多列 。所有這些文件,包括元信息、索引信息,都會共同幫助用戶快速地在不同文件之間去做跳轉或者查找 。
ClickHouse 存儲策略如果要在 ClickHouse 里做冷熱數據分層,會用到類似于 ES 中提到的生命周期策略,在 ClickHouse 里稱為存儲策略(Storage Policy) 。
與 ES 稍有不同,ClickHouse 官方并沒有將數據劃分不同的階段,比如熱數據、溫數據、冷數據這些不同的階段,ClickHouse 提供了一些規則和配置方法,需要用戶自己來制定分層策略 。
每個 ClickHouse 節點支持同時配置多塊磁盤,存儲介質可以是多種多樣的 。比如,一般用戶為了性能會給 ClickHouse 節點配置 SSD 盤;對于一些溫冷數據,用戶可以把數據存儲在成本更低的介質,如機械盤 。ClickHouse 的用戶對底層存儲介質是無感知的 。
與 ES 相似,ClickHouse 用戶需要根據數據不同的維度特征去制定存儲策略,比如每個 part 子目錄的大小、整個磁盤的剩余空間比例等,當滿足某個維度特征設定的條件時就會觸發存儲策略的執行 。這個策略會將某一個 part 從一塊盤遷移到另外一塊盤 。在 ClickHouse 中,一個節點配置的多塊盤是有優先級的,默認情況下數據會優先落在最高優先級的盤上 。這樣實現了 Part 從一個存儲介質轉移到另外一個存儲介質上 。
通過 ClickHouse 的一些 SQL 命令,如 MOVE PARTITION/PART 命令可以手動觸發數據遷移,用戶也可以通過這些命令做一些功能性的驗證 。其次有某些情況下,可能也希望能夠通過手動的方式,而不是自動轉移的方式來顯式把 part 從當前的存儲介質上轉移到另外一個存儲介質上 。
經驗總結擴展閱讀
- 花園蚊子多有什么辦法
- 2023年10月21日打官司行嗎 2023年10月21日適合打官司嗎
- 2023年10月21日進貨行嗎 2023年10月21日進貨好嗎
- 合歡花花語
- 華為怎么在手機桌面上創建文件夾
- 嘀嗒出租車怎么注冊
- 拯救者Y7000P獨顯模式和混合模式對比
- 爬蚱幾點到幾點最多
- 小腹胖是什么原因
- 鎖芯一般在哪里有賣
