ClickHouse(08)ClickHouse表引擎概況

目前ClickHouse的表引擎主要有下面四個(gè)系列,合并樹(shù)家族急前、日志引擎系列、集成的表引擎和其他特殊的引擎。

合并樹(shù)家族

Clickhouse中最強(qiáng)大的表引擎當(dāng)屬M(fèi)ergeTree(合并樹(shù))引擎及該系列(MergeTree)中的其他引擎钓猬。

MergeTree系列的引擎被設(shè)計(jì)用于插入極大量的數(shù)據(jù)到一張表當(dāng)中。數(shù)據(jù)可以以數(shù)據(jù)片段的形式一個(gè)接著一個(gè)的快速寫(xiě)入碴倾,數(shù)據(jù)片段在后臺(tái)按照一定的規(guī)則進(jìn)行合并逗噩。相比在插入時(shí)不斷修改(重寫(xiě))已存儲(chǔ)的數(shù)據(jù)掉丽,這種策略會(huì)高效很多。

主要特點(diǎn)

  • 存儲(chǔ)的數(shù)據(jù)按主鍵排序异雁。這使得您能夠創(chuàng)建一個(gè)小型的稀疏索引來(lái)加快數(shù)據(jù)檢索捶障。
  • 如果指定了分區(qū)鍵的話,可以使用分區(qū)纲刀。在相同數(shù)據(jù)集和相同結(jié)果集的情況下ClickHouse中某些帶分區(qū)的操作會(huì)比普通操作更快项炼。查詢中指定了分區(qū)鍵時(shí)ClickHouse會(huì)自動(dòng)截取分區(qū)數(shù)據(jù)。這也有效增加了查詢性能示绊。
  • 支持?jǐn)?shù)據(jù)副本锭部。ReplicatedMergeTree系列的表提供了數(shù)據(jù)副本功能。
  • 支持?jǐn)?shù)據(jù)采樣面褐。需要的話拌禾,您可以給表設(shè)置一個(gè)采樣方法。

日志引擎系列

這些引擎是為了需要寫(xiě)入許多小數(shù)據(jù)量(少于一百萬(wàn)行)的表的場(chǎng)景而開(kāi)發(fā)的展哭。

這系列的引擎有:

  • StripeLog
  • 日志
  • TinyLog

共同屬性

  • 數(shù)據(jù)存儲(chǔ)在磁盤(pán)上湃窍。
  • 寫(xiě)入時(shí)將數(shù)據(jù)追加在文件末尾。
  • 不支持突變操作匪傍。
  • 不支持索引您市。這意味著SELECT在范圍查詢時(shí)效率不高。
  • 非原子地寫(xiě)入數(shù)據(jù)役衡。如果某些事情破壞了寫(xiě)操作茵休,例如服務(wù)器的異常關(guān)閉,你將會(huì)得到一張包含了損壞數(shù)據(jù)的表手蝎。

當(dāng)然他們之間也會(huì)有差異榕莺。

主要差異點(diǎn)

  1. Log和StripeLog引擎支持:
  • 并發(fā)訪問(wèn)數(shù)據(jù)的鎖。INSERT請(qǐng)求執(zhí)行過(guò)程中表會(huì)被鎖定柑船,并且其他的讀寫(xiě)數(shù)據(jù)的請(qǐng)求都會(huì)等待直到鎖定被解除帽撑。如果沒(méi)有寫(xiě)數(shù)據(jù)的請(qǐng)求,任意數(shù)量的讀請(qǐng)求都可以并發(fā)執(zhí)行鞍时。
  • 并行讀取數(shù)據(jù)亏拉。在讀取數(shù)據(jù)時(shí),ClickHouse使用多線程逆巍。每個(gè)線程處理不同的數(shù)據(jù)塊及塘。
  1. Log引擎為表中的每一列使用不同的文件。StripeLog將所有的數(shù)據(jù)存儲(chǔ)在一個(gè)文件中锐极。因此StripeLog引擎在操作系統(tǒng)中使用更少的描述符笙僚,但是Log引擎提供更高的讀性能。

  2. TinyLog引擎是該系列中最簡(jiǎn)單的引擎并且提供了最少的功能和最低的性能灵再。TinyLog引擎不支持并行讀取和并發(fā)數(shù)據(jù)訪問(wèn)肋层,并將每一列存儲(chǔ)在不同的文件中亿笤。它比其余兩種支持并行讀取的引擎的讀取速度更慢,并且使用了和Log引擎同樣多的描述符栋猖。你可以在簡(jiǎn)單的低負(fù)載的情景下使用它净薛。

集成的表引擎

ClickHouse 提供了多種方式來(lái)與外部系統(tǒng)集成,包括表引擎蒲拉。像所有其他的表引擎一樣肃拜,使用CREATE TABLE或ALTER TABLE查詢語(yǔ)句來(lái)完成配置。然后從用戶的角度來(lái)看雌团,配置的集成看起來(lái)像查詢一個(gè)正常的表燃领,但對(duì)它的查詢是代理給外部系統(tǒng)的。這種透明的查詢是這種方法相對(duì)于其他集成方法的主要優(yōu)勢(shì)之一锦援,比如外部字典或表函數(shù)猛蔽,它們需要在每次使用時(shí)使用自定義查詢方法。

以下是支持的集成方式:

  • ODBC
  • JDBC
  • MySQL
  • MongoDB
  • HDFS
  • S3
  • Kafka
  • EmbeddedRocksDB
  • RabbitMQ
  • PostgreSQL
  • SQLite
  • Hive

其他特殊的引擎

其他的表引擎用于特定的場(chǎng)景雨涛。具體使用什么引擎要根據(jù)具體的需求來(lái)分析枢舶。這里我們簡(jiǎn)單說(shuō)一下有哪些表引擎,具體使用情況替久,我們后面再更新。

  • 分布式引擎:分布式引擎本身不存儲(chǔ)數(shù)據(jù),但可以在多個(gè)服務(wù)器上進(jìn)行分布式查詢躏尉。讀是自動(dòng)并行的蚯根。讀取時(shí),遠(yuǎn)程服務(wù)器表的索引(如果有的話)會(huì)被使用胀糜。
  • 關(guān)聯(lián)表引擎:使用JOIN操作的一種可選的數(shù)據(jù)結(jié)構(gòu)颅拦。Join表的數(shù)據(jù)總是保存在內(nèi)存中。當(dāng)往表中插入行記錄時(shí)教藻,CH會(huì)將數(shù)據(jù)塊保存在硬盤(pán)目錄中距帅,這樣服務(wù)器重啟時(shí)數(shù)據(jù)可以恢復(fù)。如果服務(wù)器非正常重啟括堤,保存在硬盤(pán)上的數(shù)據(jù)塊會(huì)丟失或被損壞碌秸。這種情況下,需要手動(dòng)刪除被損壞的數(shù)據(jù)文件悄窃。簡(jiǎn)單來(lái)說(shuō)讥电,這個(gè)是一種對(duì)join操作的優(yōu)化的引擎。
  • 內(nèi)存表:Memory 引擎以未壓縮的形式將數(shù)據(jù)存儲(chǔ)在RAM中轧抗。數(shù)據(jù)完全以讀取時(shí)獲得的形式存儲(chǔ)恩敌。換句話說(shuō),從這張表中讀取是很輕松的横媚。并發(fā)數(shù)據(jù)訪問(wèn)是同步的纠炮。鎖范圍性绿恕:讀寫(xiě)操作不會(huì)相互阻塞。不支持索引恢口。查詢是并行化的狮斗。在簡(jiǎn)單查詢上達(dá)到最大速率(超過(guò)10GB/秒),因?yàn)闆](méi)有磁盤(pán)讀取弧蝇,不需要解壓縮或反序列化數(shù)據(jù)碳褒。(值得注意的是,在許多情況下看疗,與 MergeTree 引擎的性能幾乎一樣高)沙峻。重新啟動(dòng)服務(wù)器時(shí),表中的數(shù)據(jù)消失两芳,表將變?yōu)榭账ふMǔ#褂么吮硪媸遣缓侠淼牟懒尽5鞘歉矗捎糜跍y(cè)試,以及在相對(duì)較少的行(最多約100,000,000)上需要最高性能的查詢竖螃。
  • 隨機(jī)數(shù)生成表引擎:隨機(jī)數(shù)生成表引擎為指定的表模式生成隨機(jī)數(shù)淑廊。
  • 緩沖區(qū):緩沖數(shù)據(jù)寫(xiě)入RAM中,周期性地將數(shù)據(jù)刷新到另一個(gè)表特咆。在讀取操作時(shí)季惩,同時(shí)從緩沖區(qū)和另一個(gè)表讀取數(shù)據(jù)。
  • 字典:Dictionary引擎將字典數(shù)據(jù)展示為一個(gè)ClickHouse的表腻格。
  • 用于查詢處理的外部數(shù)據(jù):ClickHouse允許向服務(wù)器發(fā)送處理查詢所需的數(shù)據(jù)以及SELECT查詢画拾。這些數(shù)據(jù)放在一個(gè)臨時(shí)表中,可以在查詢中使用(例如菜职,在IN操作符中)青抛。
  • 文件(輸入格式):數(shù)據(jù)源是以Clickhouse支持的一種輸入格式(TabSeparated,Native等)存儲(chǔ)數(shù)據(jù)的文件酬核。
  • MaterializedView:物化視圖蜜另,視圖的數(shù)據(jù)會(huì)物化到數(shù)據(jù)盤(pán)。
  • 合并:Merge引擎(不要跟MergeTree引擎混淆)本身不存儲(chǔ)數(shù)據(jù)愁茁,但可用于同時(shí)從任意多個(gè)其他的表中讀取數(shù)據(jù)蚕钦。讀是自動(dòng)并行的,不支持寫(xiě)入鹅很。讀取時(shí)嘶居,那些被真正讀取到數(shù)據(jù)的表的索引(如果有的話)會(huì)被使用。
  • Null:當(dāng)寫(xiě)入Null類型的表時(shí),將忽略數(shù)據(jù)邮屁。從Null類型的表中讀取時(shí)整袁,返回空。
  • 集合:始終存在于RAM中的數(shù)據(jù)集佑吝。它適用于IN運(yùn)算符的右側(cè)坐昙。
  • URL:用于管理遠(yuǎn)程HTTP/HTTPS服務(wù)器上的數(shù)據(jù)。該引擎類似文件引擎芋忿。
  • 視圖:它不存儲(chǔ)數(shù)據(jù)炸客,僅存儲(chǔ)指定的SELECT查詢。從表中讀取時(shí)戈钢,它會(huì)運(yùn)行此查詢(并從查詢中刪除所有不必要的列)痹仙。

資料分享

ClickHouse經(jīng)典中文文檔分享

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市殉了,隨后出現(xiàn)的幾起案子开仰,更是在濱河造成了極大的恐慌,老刑警劉巖薪铜,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件众弓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡隔箍,警方通過(guò)查閱死者的電腦和手機(jī)谓娃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞍恢,“玉大人傻粘,你說(shuō)我怎么就攤上這事“锏簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵窒典,是天一觀的道長(zhǎng)蟆炊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瀑志,這世上最難降的妖魔是什么涩搓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮劈猪,結(jié)果婚禮上昧甘,老公的妹妹穿的比我還像新娘。我一直安慰自己战得,他們只是感情好充边,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般浇冰。 火紅的嫁衣襯著肌膚如雪贬媒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天肘习,我揣著相機(jī)與錄音际乘,去河邊找鬼。 笑死漂佩,一個(gè)胖子當(dāng)著我的面吹牛脖含,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播投蝉,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼养葵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墓拜?” 一聲冷哼從身側(cè)響起港柜,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咳榜,沒(méi)想到半個(gè)月后夏醉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涌韩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年畔柔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臣樱。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靶擦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雇毫,到底是詐尸還是另有隱情玄捕,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布棚放,位于F島的核電站枚粘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飘蚯。R本人自食惡果不足惜馍迄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局骤。 院中可真熱鬧攀圈,春花似錦、人聲如沸峦甩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至撕捍,卻和暖如春拿穴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忧风。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工默色, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狮腿。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓腿宰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缘厢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吃度,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容