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