來源:北大青鳥總部 2020年09月02日 14:44
在玩手機的同時,有木有發(fā)現(xiàn)它很懂你的心,給你推薦的內(nèi)容基本是你可以接受的?甚至還有點讓你小心動,偶爾也讓你有點小驚喜,讓你不得不感嘆系統(tǒng)的強大“太厲害了,居然
那么ClickHouse到底是什么呢?它有什么特性可以獲得如此多大廠的青睞、互聯(lián)網(wǎng)企業(yè)的使用呢?今天我們就來詳細介紹這款數(shù)據(jù)庫。
ClickHouse是用于聯(lián)機分析(即OLAP,OnLineAnalyticalProcessing)的列式數(shù)據(jù)庫管理系統(tǒng)DBMS。OLAP與OLTP是相對的,OLAP主要是用于讀取數(shù)據(jù)、進行數(shù)據(jù)分析,輔助運營決策分析;OLTP(OnLineTransaction Processing)聯(lián)機事務(wù)處理是進行事務(wù)的增刪改查操作,比如在電商系統(tǒng)中進行商品的購買、庫存減少等。
在OLAP場景中側(cè)重于對數(shù)據(jù)的分析,因此讀數(shù)據(jù)操作是多于寫數(shù)據(jù)的。在數(shù)據(jù)一次性寫入后,數(shù)據(jù)工程師需要從各個角度對數(shù)據(jù)進行挖掘、分析,直到發(fā)現(xiàn)其中的業(yè)務(wù)變化趨勢,對于數(shù)據(jù)的讀取是非常頻繁,而且不需要數(shù)據(jù)的更新,也不需要事務(wù)來強調(diào)一致性,只要獲取到數(shù)據(jù)就好啦,ClickHouse非常適合作為底層數(shù)據(jù)庫提供支持。
所謂列式數(shù)據(jù)庫指的是數(shù)據(jù)在數(shù)據(jù)庫中存儲的方式。在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫如Mysql中,數(shù)據(jù)是按行來存儲的,而在列式數(shù)據(jù)庫如ClickHouse中,數(shù)據(jù)是按列來存儲的。這樣存儲的好處就是在做數(shù)據(jù)分析時選擇某幾列來作為分析屬性,獲取數(shù)據(jù)非???,延遲低,如果按行讀取,每次只能讀取一個數(shù)據(jù),有10000條就需要讀取1000次,降低了效率。
在分析場景下,列式數(shù)據(jù)庫還有很多其它的優(yōu)點,比如低成本、低帶寬、低延時。在列式數(shù)據(jù)庫中我們知道同一列的數(shù)據(jù)都是一個類型的,那么可以將它進行壓縮,在同樣的存儲空間下可以放更多的數(shù)據(jù),既節(jié)省了網(wǎng)絡(luò)帶寬,也提高了數(shù)據(jù)的cache命中率,更容易更快的獲取到數(shù)據(jù)。
介紹了ClickHouse的基本特性之后,我們再從存儲層和計算層看看它又給我們帶來哪些驚喜呢?在存儲層它實現(xiàn)了數(shù)據(jù)有序存儲、主鍵索引、稀疏索引、數(shù)據(jù)分區(qū)分片、主備復(fù)制等功能。
所謂數(shù)據(jù)的有序存儲指的是數(shù)據(jù)在建表時可以將數(shù)據(jù)按照某些列進行排序,排序之后,相同類型的數(shù)據(jù)在磁盤上有序的存儲,在進行范圍查詢時所獲取的數(shù)據(jù)都存儲在一個或若干個連續(xù)的空間內(nèi),極大的減少了磁盤IO時間;所謂數(shù)據(jù)分區(qū)分片,指的是在ClickHouse的部署模式上支持單機模式和分布式集群模式,在分布式中會把數(shù)據(jù)分為多個分片,并且分布到不同的節(jié)點上,它提供了豐富的分片策略,包含random隨機分片(將寫入數(shù)據(jù)隨機分發(fā)到集群中的某個節(jié)點)、constant固定分片(將寫入數(shù)據(jù)分發(fā)到某個固定節(jié)點)、columnvalue分片(將寫入數(shù)據(jù)按某一列的值進行hash分片)、自定義表達式分片(將寫入數(shù)據(jù)按照自定義的規(guī)則進行hash分片)。
在計算層ClickHouse提供了多核并行、分布式計算、近似計算、復(fù)雜數(shù)據(jù)類型支持等技術(shù)能力,最大化程度利用CPU資源,提升系統(tǒng)查詢速度。所謂多核并行指的是在ClickHouse中數(shù)據(jù)是被分成了多個分區(qū),查詢某條數(shù)據(jù)時通過多分區(qū)的數(shù)據(jù)利用CPU的多核同時并行處理獲取數(shù)據(jù),降低了查詢時長;所謂分布式計算指的是ClickHouse將查詢?nèi)蝿?wù)拆分成多個子任務(wù)下發(fā)到多個集群中進行多機并行處理,最后匯聚結(jié)果給到用戶,提供最近hostname規(guī)則(即將任務(wù)下發(fā)到機器最近的hostname節(jié)點)、inorder(即按順序進行分發(fā),當某個分片不可用時,下發(fā)到下一個分片);所謂近似計算指的是犧牲一定的精確度獲取數(shù)據(jù),在海量數(shù)據(jù)的分析中,其實并不需要非常精準的數(shù)據(jù),近似數(shù)據(jù)足以分析決策,ClickHouse提供了中位數(shù)、分位數(shù)等多種聚合函數(shù),極大的提高了查詢性能,減輕了計算壓力。
ClickHouse的發(fā)展可謂是非常快速,除了各個大廠都在使用之外,在社區(qū)方面,github標記為星級項目的人超過9000,成為最受開源的項目之一。它是一套完整的解決方案,自帶存儲能力、計算能力,自己實現(xiàn)了分布式計算、分布式集群部署,完全高可用,真可謂是簡單靈活又不失強大!
在云計算、大數(shù)據(jù)的互聯(lián)網(wǎng)時代,數(shù)據(jù)分析成為了一項尤其重要的能力,如果你還會這么一門大數(shù)據(jù)庫技術(shù),毫無疑問,絕對會為你的簡歷加分喔,畢竟阿里、騰訊、頭條、快手都已經(jīng)在使用ClickHouse了呀~