天天看點

ClickHouse(01)什麼是ClickHouse,ClickHouse适用于什麼場景ClickHouse的由來ClickHouse的定義及其優缺點ClickHouse為何這麼快的原因ClickHouse相關資料分享

文章目錄

  • ClickHouse的由來
  • ClickHouse的定義及其優缺點
  • ClickHouse為何這麼快的原因
  • ClickHouse相關資料分享

ClickHouse的由來

ClickHouse是什麼資料庫?ClickHouse速度有多快?應用場景是怎麼樣的?ClickHouse是關系型資料庫嗎?ClickHouse目前是很火爆的一款面向OLAP的資料,可以提供秒級的大資料查詢。

Google于2003~2006年相繼發表了三篇論文“Google File System”“Google MapReduce”和“Google Bigtable”,将大資料的處理技術帶進了大衆視野。2006年開源項目Hadoop的出現,标志着大資料技術普及的開始,大資料技術真正開始走向普羅大衆。長期以來受限于資料庫處理能力的大資料技術,開始了波瀾壯闊的技術革新浪潮席卷而來。Hadoop最初指代的是分布式檔案系統HDFS和MapReduce計算架構,但是它一路高歌猛進,在此基礎之上像搭積木一般快速發展成為一個龐大的生态,包括Yarn、Hive、HBase、Spark等數十種之多元件相繼開源。Hadoop全家桶很快成為了主流。傳統關系型資料庫所建構的資料倉庫,被以Hive為代表的大資料技術所取代,資料查詢分析的查詢計算引擎Spark、Impala、Kylin等都出來了。Hadoop成為大資料的代名詞。

Hadoop雖然帶來了諸多便利性,随着時代的發展,但是也帶來了一些新的問題。

  • Hadoop生态化的兩面性:臃腫和複雜。Hadoop生态下的每種元件都自成一體、互相獨立,強強組合的技術元件有些時候顯得過于笨重了。
  • 随着現代化終端系統對實效性的要求越來越高,Hadoop在海量資料和高時效性的雙重壓力下,速度有點更不上了。

當然這是hadoop生态的确定,但是目前最普及的方案還是hadoop莫屬,但是hadoop生态在大資料量的查詢群組件的笨重确實存在,在日常的資料開發中,資料分析,BI等都需要查詢資料,目前的hadoop查詢引擎提供的查詢速度,相對于ClickHouse,會慢很多。

是以,這款非Hadoop生态、簡單、自成一體的技術元件ClickHouse橫空出世。

ClickHouse背後的研發團隊是一家俄羅斯本土的網際網路企業Yandex公司,2011年在納斯達克上市,它是現今世界上最大的俄語搜尋引擎,占據了本國47%以上的搜尋市場,Google是它的直接競争對手。 ClickHouse的前身是一款線上流量分析的産品Yandex.Metrica,類似Google Analytics,随着Yandex.Metrica業務的發展,其底層架構曆經四個階段,最終形成了大家現在所看到的ClickHouse。

ClickHouse的定義及其優缺點

ClickHouse是一款高性能、MPP架構、列式存儲、具有完備DBMS功能的OLAP資料庫。

ClickHouse可以在存儲資料超過20萬億行的情況下,做到了90%的查詢能夠在1秒内傳回。它基本能夠滿足各種資料分析類的場景,并且随着資料體量的增大,它與Spark、Impala、Kylin對比,優勢也會變得越為明顯。

ClickHouse适用于商業智能領域(BI),也能夠被廣泛應用于廣告流量、Web、App流量、電信、金融、電子商務、資訊安全、網絡遊戲、物聯網等衆多其他領域。應該說它适合的場景,就是OLAP。

ClickHouse不是萬能的。它對于OLTP事務性操作的場景支援有限,它有以下幾點不足。

  • 不支援事務。
  • 不擅長根據主鍵按行粒度進行查詢(雖然支援),故不應該把ClickHouse當作Key-Value資料庫使用。
  • 不擅長按行删除資料(雖然支援)。

這些弱點并不能視為ClickHouse的缺點,事實上其他同類高性能的OLAP資料庫同樣也不擅長上述的這些方面。因為對于一款OLAP資料庫而言,上述這些能力并不是重點,隻能說這是為了極緻查詢性能所做的權衡。

ClickHouse為何這麼快的原因

前面我們說了ClickHouse以在存儲資料超過20萬億行的情況下,在1秒内傳回查詢,那它是怎麼做到的?主要有下面的原因。

  1. 列式存儲與資料壓縮

    列式存儲和資料壓縮,對于一款高性能資料庫來說是必不可少的。如果你想讓查詢變得更快,那麼最簡單且有效的方法是減少資料掃描範圍和資料傳輸時的大小,列式存儲和資料壓縮就可以做到這兩點。

  2. 向量化執行

    能更新硬體解決的問題,千萬别優化程式。能用錢解決的問題,那都不是問題。

    向量化執行,可以簡單地看作一項消除程式中循環的優化,是基于底層硬體實作的優化。這裡用一個形象的例子比喻。小胡經營了一家果汁店,雖然店裡的鮮榨蘋果汁深受大家喜愛,但客戶總是抱怨制作果汁的速度太慢。小胡的店裡隻有一台榨汁機,每次他都會從籃子裡拿出一個蘋果,放到榨汁機内等待出汁。如果有8個客戶,每個客戶都點了一杯蘋果汁,那麼小胡需要重複循環8次上述的榨汁流程,才能榨出8杯蘋果汁。如果制作一杯果汁需要5分鐘,那麼全部制作完畢則需要40分鐘。為了提升果汁的制作速度,小胡想出了一個辦法。他将榨汁機的數量從1台增加到了8台,這麼一來,他就可以從籃子裡一次性拿出8個蘋果,分别放入8台榨汁機同時榨汁。此時,小胡隻需要5分鐘就能夠制作出8杯蘋果汁。為了制作n杯果汁,非向量化執行的方式是用1台榨汁機重複循環制作n次,而向量化執行的方式是用n台榨汁機隻執行1次。

    ClickHouse(01)什麼是ClickHouse,ClickHouse适用于什麼場景ClickHouse的由來ClickHouse的定義及其優缺點ClickHouse為何這麼快的原因ClickHouse相關資料分享

上圖中,右側為vectorization(向量化計算),左側為經典的标量計算。将多次for循環計算變成一次計算完全仰仗于CPU的SIMD指令集,SIMD指令可以在一條cpu指令上處理2、4、8或者更多份的資料。在Intel處理器上,這個稱之為SSE以及後來的AVX;在ARM處理器上,這個稱之為NEON。

是以簡單來說,向量化計算就是将一個loop——處理一個array的時候每次處理1個資料共處理N次,轉化為vectorization——處理一個array的時候每次同時處理8個資料共處理N/4次,假如cpu指令上可以處理更多份的資料,設為M,那就是N/M次。

為了實作向量化執行,需要利用CPU的SIMD指令。SIMD的全稱是Single Instruction Multiple Data,即用單條指令操作多條資料。現代計算機系統概念中,它是通過資料并行以提高性能的一種實作方式,它的原理是在CPU寄存器層面實作資料的并行操作。ClickHouse目前利用SSE4.2指令集實作向量化執行。

  1. 多樣化的表引擎

    與MySQL類似,ClickHouse也将存儲部分進行了抽象,把存儲引擎作為一層獨立的接口。目前ClickHouse共擁有合并樹、記憶體、檔案、接口和其他6大類20多種表引擎。每一種表引擎都有着各自的特點,使用者可以根據實際業務場景的要求,選擇合适的表引擎使用。

  2. 多線程與分布式

    多線程處理就是通過線程級并行的方式實作了性能的提升,ClickHouse将資料劃分為多個partition,每個partition再進一步劃分為多個index granularity,然後通過多個CPU核心分别處理其中的一部分來實作并行資料處理。這種設計下,可以使得ClickHouse單條Query就能利用整機所有CPU,極緻的并行處理能力,極大的降低了查詢延時。

而分布式資料屬于基于分而治之的基本思想,實作的優化,如果一台伺服器性能吃緊,那麼就利用多台服務的資源協同處理。這個前提是需要在資料層面實作資料的分布式,因為計算移動比資料移動更加劃算,在各伺服器之間,通過網絡傳輸資料的成本是高昂的,是以預先将資料分布到各台伺服器,将資料的計算查詢直接下推到資料所在的伺服器。

ClickHouse相關資料分享

如果還想了解更多關于ClickHouse,可以看看這個文檔,也可以看看ClickHouse官方網站的文檔

ClickHouse經典中文文檔分享

文章參考:ClickHouse(01)什麼是ClickHouse,ClickHouse适用于什麼場景