ClickHouse 簡單介紹包括分佈式表,子表,ttl,主鍵

介紹

ClickHouse是一款由俄羅斯IT人員開發的一款開源的列式數據庫管理系統。clickehouse是一款OLAP分析型數據庫,以快取勝。至於爲什麼快,網絡上各位大牛已經做了介紹,此處不再敘述。本文主要從使用角度來介紹關於CH的分佈式表,ttl,主鍵等信息。

官方介紹

分佈式表

分佈式表是一種邏輯上的表,並不真正存儲數據。查詢時,請求直接下發分佈式表,分佈式表會下發到各個子表進行查詢,之後結果進行彙總、合併,極大的加快了檢索效率。它的創建和普通字表創建語法相似,主要是引擎類型不同。語法具體如下:

create table example_all (d DateTime, a Int) ENGINE = Distributed (test, default, example , rand());

說明:Distributed 代表所屬引擎,分佈式必須爲此值;括號裏 test代表分佈式集羣名;default代表database也就是我們說的命名空間或者數據庫名;example是指分佈式表對應的子表名;rand()此項稱之爲ShardingKey,代表數據分發測略,入庫時如何分發,可以hash或者隨機或者輪詢等,每種對應的shardingKey配置不同,可根據需要選擇。

目前官方已經不建議使用分佈式表入數據,因爲效率可能會比直接入子表差,但如果對入庫效率沒所謂的業務來說,可以繼續入分佈式表,目前我們就是這麼做的,會方便一些。否則要不斷更換子表客戶端,以此來入庫所有集羣節點,達到數據均衡。

子表

與分佈式表相對應的就是子表。子表是真正存儲數據的表。也是真正幹活的表。子表最常用的引擎也就是MergeTree系列了,底層與rocksdb相同,基於LSM-tree實現的,此處不在贅述。

MergeTree系列引擎有很多不同的種類,可供使用。一般最常用的還是MergeTree,還有可以主鍵去重的ReplacingMergeTree。關於數據去重,ClickHouse支持不是很好,不能像一般數據庫一樣做到主鍵覆蓋或者過濾,即使使用ReplacingMergeTree,也不能做到實時去重,只有數據觸發合併,數據纔會刪除,否則重複數據依然可見並且可查。可通過手動調用語句來觸發合併,進而刪除數據。

手動觸發合併語句:OPTIMIZE table example final;  執行之後,即可刪除

MergeTree系列建表語句:

create table example (d DateTime, a Int) ENGINE = MergeTree PARTITION BY toYYYYMM(d)  order by d 

TTL d + INTERNAL 90 Day   

SETTINGS index_granularity = 1024;

PARTITION BY:如果要設置此項,要求表中必須存在一列時間類型的字段,比如上述表中列d DateTime數據類型即可。可以選擇分區方式,到天或者到月,根據業務需求而定

order by:如果不設置主鍵PrimaryKey,默認order by字段爲主鍵也就是一級索引。如果設置了主鍵,則以主鍵爲準即可。

SETTINGS index_granularity:設置索引力度大小。默認8192,也可自行修改,原則上越小,代表最終結果檢索的範圍越小,但同樣的,這樣搜索的markRange會多,不能設置過小,可根據自身需求進行設置,並測試,選擇最優即可,目前我們設置的爲1024。

TTL

關於ttl,這就與數據存儲有關了。線上的業務場景也是,很多時候,隨着新數據的增加,老的數據慢慢提取的價值就少,並且還佔用大量的存儲空間,所以很多數據庫都會設置TTL過期時間,來及時的清除過期數據。ClickHouse也不例外。

如上述子表創建所示,設置ttl時間,這是針對表級別的,clickhouse還支持針對列級別的ttl設置,但是只有在所屬partition的所有列都過期後,纔會整體刪除,否則會將已經過期的列設置爲默認值(如果此列爲int類型,那麼會設置爲0),這對是用來說並不是特別方便,所以我們選擇表級別,如上述子表建表語句所示。

注意:目前ttl的功能只支持MergeTree系列引擎,其它暫不支持。

 

總結

之前,我們實用的是rocksdb,選擇clickhouse的主要原因是,它可以支持大量的分析任務,我們後期也會將算子下沉,以此來簡化業務邏輯,豐富存儲功能。

還有就是sql語言,比較大衆,成本可控。快就不說了,業界公認,有目共睹。

唯一的問題是,學習材料太少了,哈哈,後期大家可以一起交流,分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章