ClickHouse從入門到精通

什么是ClickHouse?

ClickHouse是一個(gè)用于聯(lián)機(jī)分析(OLAP)的列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。
聯(lián)機(jī)分析處理OLAP是一種軟件技術(shù),它使分析人員能夠迅速鸟缕、一致搀庶、交互地從各個(gè)方面觀察信息按脚,以達(dá)到深入理解數(shù)據(jù)的目的溉卓。Online analytical processing
OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的主要應(yīng)用,主要是基本的搬泥、日常的事務(wù)處理桑寨,例如銀行交易。on-line transaction processing

誰在用忿檩?

今日頭條 內(nèi)部用ClickHouse來做用戶行為分析尉尾,內(nèi)部一共幾千個(gè)ClickHouse節(jié)點(diǎn),單集群最大1200節(jié)點(diǎn)燥透,總數(shù)據(jù)量幾十PB沙咏,日增原始數(shù)據(jù)300TB左右辨图。
騰訊內(nèi)部用ClickHouse做游戲數(shù)據(jù)分析,并且為之建立了一整套監(jiān)控運(yùn)維體系肢藐。
攜程內(nèi)部從18年7月份開始接入試用故河,目前80%的業(yè)務(wù)都跑在ClickHouse上。每天數(shù)據(jù)增量十多億吆豹,近百萬次查詢請(qǐng)求鱼的。
快手內(nèi)部也在使用ClickHouse,存儲(chǔ)總量大約10PB痘煤, 每天新增200TB凑阶, 90%查詢小于3S。
在國(guó)外衷快,Yandex內(nèi)部有數(shù)百節(jié)點(diǎn)用于做用戶點(diǎn)擊行為分析宙橱,CloudFlare、Spotify等頭部公司也在使用蘸拔。
米哈游也有專門的數(shù)據(jù)分析部門在用

實(shí)現(xiàn)了什么师郑?

數(shù)據(jù)有序存儲(chǔ)、主鍵索引都伪、稀疏索引呕乎、數(shù)據(jù)Sharding、數(shù)據(jù)Partitioning陨晶、TTL猬仁、主備復(fù)制

數(shù)據(jù)有序存儲(chǔ):

ClickHouse支持在建表時(shí),指定將數(shù)據(jù)按照某些列進(jìn)行sort by先誉。
排序后湿刽,保證了相同sort key的數(shù)據(jù)在磁盤上連續(xù)存儲(chǔ),且有序擺放褐耳。在進(jìn)行等值诈闺、范圍查詢時(shí),where條件命中的數(shù)據(jù)都緊密存儲(chǔ)在一個(gè)或若干個(gè)連續(xù)的Block中铃芦,而不是分散的存儲(chǔ)在任意多個(gè)Block雅镊, 大幅減少需要IO的block數(shù)量。另外刃滓,連續(xù)IO也能夠充分利用操作系統(tǒng)page cache的預(yù)取能力仁烹,減少page fault。

使用了什么存儲(chǔ)結(jié)構(gòu)咧虎,為什么是LSM-Tree卓缰?

Google提出的BIGTable又叫LSM-Tree全稱是Log Structured Merge Tree,是一種分層,有序征唬,面向磁盤的數(shù)據(jù)結(jié)構(gòu)捌显,其核心思想是充分利用了磁盤順序?qū)懀疟P批量的順序?qū)懸h(yuǎn)比隨機(jī)寫性能高出很多.
標(biāo)志的就是kafka总寒,把磁盤順序?qū)懱嵘搅藰O致扶歪。

和傳統(tǒng)的B+樹進(jìn)行對(duì)比,和傳統(tǒng)的B+樹進(jìn)行對(duì)比偿乖,隨機(jī)寫PK順序?qū)?/h4>

LSM-Tree的設(shè)計(jì)思路是击罪,將數(shù)據(jù)拆分為幾百M(fèi)大小的Segments,并是順序?qū)懭胩靶健2焕速M(fèi)時(shí)間媳禁。
B+Tree則是將數(shù)據(jù)拆分為固定大小的Block或Page, 一般是4KB大小,和磁盤一個(gè)扇區(qū)的大小對(duì)應(yīng)画切,Page是讀寫的最小單位竣稽。
在數(shù)據(jù)的更新和刪除方面,B+Tree可以做到原地更新和刪除霍弹,這種方式對(duì)數(shù)據(jù)庫事務(wù)支持更加友好毫别,因?yàn)橐粋€(gè)key只會(huì)出現(xiàn)一個(gè)Page頁里面
但由于LSM-Tree只能追加寫,并且在L0層key的range會(huì)重疊典格,所以對(duì)事務(wù)支持較弱岛宦,只能在Segment Compaction的時(shí)候進(jìn)行真正地更新和刪除。

因此LSM-Tree的優(yōu)點(diǎn)是支持高吞吐的寫(可認(rèn)為是O(1))耍缴,這個(gè)特點(diǎn)在分布式系統(tǒng)上更為看重砾肺,當(dāng)然針對(duì)讀取普通的LSM-Tree結(jié)構(gòu),讀取是O(N)的復(fù)雜度防嗡,在使用索引或者緩存優(yōu)化后的也可以達(dá)到O(logN)的復(fù)雜度变汪。
而B+tree的優(yōu)點(diǎn)是支持高效的讀(穩(wěn)定的OlogN),但是在大規(guī)模的寫請(qǐng)求下(復(fù)雜度O(LogN))蚁趁,效率會(huì)變得比較低裙盾,因?yàn)殡S著insert的操作,為了維護(hù)B+樹結(jié)構(gòu)他嫡,節(jié)點(diǎn)會(huì)不斷的分裂和合并番官。操作磁盤的隨機(jī)讀寫概率會(huì)變大,故導(dǎo)致性能降低钢属。

關(guān)鍵特征提扰侨邸:

1:適應(yīng)場(chǎng)景為絕大多數(shù)都是讀請(qǐng)求

2:數(shù)據(jù)大批次更新,每次(1000行)署咽,而不是高頻率,低行數(shù)更新。(這樣就能列存儲(chǔ)就能應(yīng)用上宁否,將1000條插入窒升,拆分成對(duì)x列的插入(行數(shù)>列數(shù)))

3:已添加到數(shù)據(jù)庫的數(shù)據(jù)不能修改(不建議修改,會(huì)影響到排序和聚合)

4:對(duì)于讀取慕匠,行數(shù)大于列數(shù)(這樣才能將行的讀取轉(zhuǎn)換為列的讀取饱须,要是行數(shù)等于列數(shù),這個(gè)優(yōu)勢(shì)就不復(fù)存在)

5:寬表台谊,即每個(gè)表存在大量的列

6:查詢相對(duì)較少(高頻率用ES更適合蓉媳,有查詢緩存),適用報(bào)表,做低頻率的數(shù)據(jù)聚合分析

7:簡(jiǎn)單查詢锅铅,可能也會(huì)有50ms左右的延時(shí)

8:列中的數(shù)據(jù)相對(duì)較小酪呻,方便聚合,如果超過60的大JSON盐须,建議拆分成多列進(jìn)行聚合

9:?jiǎn)蝹€(gè)查詢高吞吐量(并發(fā)雖然不適合玩荠,但適合對(duì)大數(shù)據(jù)的處理,單服務(wù)器每秒10億行的處理速度)

10:不支持事務(wù) (大數(shù)據(jù)的事務(wù)處理贼邓,會(huì)浪費(fèi)多余的性能去維護(hù)數(shù)據(jù)的完整性阶冈,這會(huì)喪失他的快速分析優(yōu)勢(shì)),關(guān)于事務(wù)其實(shí)參考上面的存儲(chǔ)結(jié)構(gòu)就能發(fā)現(xiàn)了塑径。

11:同上女坑,數(shù)據(jù)一致無法保證

12:?jiǎn)蝹€(gè)查詢最好是大表拖小表

13:查詢結(jié)果小于源數(shù)據(jù),全量查詢统舀,啥都頂不住

14:靈活多變匆骗,適用于非預(yù)先建模的場(chǎng)景(如業(yè)務(wù)要做實(shí)時(shí)分析,條件也是隨機(jī)的绑咱,就很適合使用)

參考文章:
https://cloud.tencent.com/developer/article/1441835
https://developer.aliyun.com/article/739804

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绰筛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子描融,更是在濱河造成了極大的恐慌铝噩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窿克,死亡現(xiàn)場(chǎng)離奇詭異骏庸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)年叮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門具被,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人只损,你說我怎么就攤上這事一姿∑哌郑” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵叮叹,是天一觀的道長(zhǎng)艾栋。 經(jīng)常有香客問我,道長(zhǎng)蛉顽,這世上最難降的妖魔是什么蝗砾? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮携冤,結(jié)果婚禮上悼粮,老公的妹妹穿的比我還像新娘。我一直安慰自己曾棕,他們只是感情好扣猫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睁蕾,像睡著了一般苞笨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上子眶,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天瀑凝,我揣著相機(jī)與錄音,去河邊找鬼臭杰。 笑死粤咪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渴杆。 我是一名探鬼主播寥枝,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼磁奖!你這毒婦竟也來了囊拜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤比搭,失蹤者是張志新(化名)和其女友劉穎冠跷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體身诺,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜜托,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霉赡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橄务。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖穴亏,靈堂內(nèi)的尸體忽然破棺而出蜂挪,到底是詐尸還是另有隱情重挑,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布棠涮,位于F島的核電站攒驰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏故爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一隅津、第九天 我趴在偏房一處隱蔽的房頂上張望诬垂。 院中可真熱鬧,春花似錦伦仍、人聲如沸结窘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隧枫。三九已至,卻和暖如春谓苟,著一層夾襖步出監(jiān)牢的瞬間官脓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工涝焙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卑笨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓仑撞,卻偏偏與公主長(zhǎng)得像赤兴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隧哮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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