JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐( 二 )


node.roles: ["data_hot", "data_content"]生命周期策略在了解完 Data Stream 、Index Lifecycle Management、Node Role 這些概念以后,就可以為數據創建一些不同的生命周期策略(Lifecycle Policy) 。
【JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐】根據生命周期策略中定義的不同維度的索引特征,如索引的大小、索引里的文檔的數量、索引創建的時間,ES 可以自動地幫用戶把某個生命周期階段的數據滾動到另一個階段,在 ES 中的術語是 rollover 。
比如,用戶可以制定基于索引大小維度的特征 , 把熱數據滾動到溫數據 , 或者根據一些其它規則 , 再把溫數據滾動到冷數據 。這樣 , 索引在不同生命周期的階段之間去滾動的時候,相應的它索引的數據也會去做遷移和滾動 。ES 可以自動完成這些工作,但是生命周期策略則需要用戶自己來定義 。
下面的截圖,是 Kibana 的管理界面,用戶可以通過圖形化的方式去配置生命周期策略 ??梢钥吹接腥齻€階段,從上到下分別是熱數據、溫數據以及冷數據 。

JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
展開其中熱數據階段的高級設置,可以看到更詳細,上文提到的基于不同維度特征的策略配置,如在下圖右邊看到的這三個選項 。
JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
  1. 索引的大??,示茵偧上的例奏]?50GB,當索引的大小超過 50GB 的時候,就會把它從熱數據階段滾動到溫數據階段 。
  2. 最大的文檔數,ES 里索引的單元是文檔,用戶數據是以文檔的形式寫入 ES 中的,所以文檔數也是一個可以衡量的指標 。
  3. 最大索引創建時間,這里的示例是 30 天,假設某個索引已經創建了 30 天了,這個時候就會觸發剛剛提到的從熱數據階段到溫數據的滾動 。
02- ClickHouse 數據分層架構詳解下圖是一組從大到小的俄羅斯套娃,它非常形象地展現了 ClickHouse 的數據管理模式 ,  MergeTree 引擎 。
  • Table: 在圖片的最右邊是一個最大的概念,用戶最開始要創建或者能夠直接接觸到的就是 Table;
  • Partition:是一個更小的維度或者更小的粒度 。在 ClickHouse 里,數據分成 Partition 來存儲,每個 Partition 會有一個標識;
  • Part:在每個 Partition 中,又會再進一步地細分為多個 Part 。如果查看 ClickHouse 磁盤上存儲的數據格式,可以認為每一個子目錄就是一個 Part;
  • Column:在 Part 里會看到一些更小粒度的數據,即 Column 。ClickHouse 的引擎使用的是列式存儲,所有的數據都是按照列存的方式來組織 。在 Part 目錄里會看到很多列,比如 Table 可能有100 列,就會有 100 個 Column 文件;
  • Block:每個 Column 文件里是按照 Block 的粒度來組織 。

JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
下面這個示例中 , 在 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

推薦閱讀