一. 概述
隨著物聯網 IOT 時代的來臨,IOT 設備感知和報警存儲的數據越來越大,有用的價值數據需要數據分析師去分析。大數據分析成了非常重要的環節。當然近兩年開啟的開源大潮,為大數據分析工程師提供了十分富余的工具。但這同時也增加了開發者選擇合適的工具的難度,尤其對于新入行的開發者來說。學習成本,框架的多樣化和復雜度成了很大的難題。例如 Kafka,Hdfs,Spark,Hive 等等組合才能產生最后的分析結果。把各種開源框架、工具、庫、平臺人工整合到一起所需工作之復雜,是大數據領域開發和數據分析師常有的抱怨之一,也是他們支持大數據分析平臺簡單化和統一化的首要原因。
二.ClickHouse 發展歷史
Yandex 在 2016 年 6 月 15 日開源了一個數據分析的數據庫,名字叫做 ClickHouse,這對保守俄羅斯人來說是個特大事。更讓人驚訝的是,這個列式存儲數據庫的跑分要超過很多流行的商業 MPP 數據庫軟件,例如 Vertica。如果你沒有聽過 Vertica,那你一定聽過 Michael Stonebraker,2014 年圖靈獎的獲得者,PostgreSQL 和 Ingres 發明者(Sybase 和 SQL Server 都是繼承 Ingres 而來的), Paradigm4 和 SciDB 的創辦者。Michael Stonebraker 于 2005 年創辦 Vertica 公司,后來該公司被 HP 收購,HP Vertica 成為 MPP 列式存儲商業數據庫的高性能代表,Facebook 就購買了 Vertica 數據用于用戶行為分析。
三.ClickHouse 支持特性剖析
在看 ClickHouse 運行場景之前,架構師或開發人員必須要了解技術的功能特性以及弊端。只有”知己知彼”才可以”百戰不殆”,接下來我們看一下 ClickHouse 的具體特點。我們來看看其中的一些功能:
?1. 真正的面向列的 DBMS
在一個真正的面向列的 DBMS 中,沒有任何“垃圾”存儲在值中。例如,必須支持定長數值,以避免在數值旁邊存儲長度“數字”。例如,十億個 UInt8 類型的值實際上應該消耗大約 1 GB 的未壓縮磁盤空間,否則這將強烈影響 CPU 的使用。由于解壓縮的速度(CPU 使用率)主要取決于未壓縮的數據量,所以即使在未壓縮的情況下,緊湊地存儲數據(沒有任何“垃圾”)也是非常重要的。
因為有些系統可以單獨存儲單獨列的值,但由于其他場景的優化,無法有效處理分析查詢。例如 HBase,BigTable,Cassandra 和 HyperTable。在這些系統中,每秒鐘可以獲得大約十萬行的吞吐量,但是每秒不會達到數億行。
另外,ClickHouse 是一個 DBMS,而不是一個單一的數據庫。ClickHouse 允許在運行時創建表和數據庫,加載數據和運行查詢,而無需重新配置和重新啟動服務器。
?2. 數據壓縮
一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用數據壓縮。但是,數據壓縮確實提高了性能。
?3. 磁盤存儲的數據
許多面向列的 DBMS(SAP HANA 和 GooglePowerDrill)只能在內存中工作。但即使在數千臺服務器上,內存也太小,無法在 Yandex.Metrica 中存儲所有瀏覽量和會話。
?4. 多核并行處理
多核多節點并行化大型查詢。
?5. 在多個服務器上分布式處理
上面列出的列式 DBMS 幾乎都不支持分布式處理。在 ClickHouse 中,數據可以駐留在不同的分片上。每個分片可以是用于容錯的一組副本。查詢在所有分片上并行處理。這對用戶來說是透明的。
?6.SQL 支持
如果你熟悉標準的 SQL 語法,那么大家在談論 ClickHouse SQL 語法的支持層面上,就不能算真正全面的支持 SQL 語法了。ClickHouse ?SQL 有跟真正 SQL 不一樣的函數名稱。不過語法基本跟 SQL 語法兼容,支持 JOIN、FROM、IN 和 JOIN 子句以及標量子查詢支持子查詢。不支持關聯子查詢。ClickHouse 支持基于 SQL 的聲明性的查詢語言,并且在許多情況下符合 SQL 標準。支持 FROM BY、IN 和 JOIN 子句中的 GROUP BY、ORDER BY,標量子查詢和子查詢。不支持特殊的子查詢和窗口函數。
?7. 向量化引擎
數據不僅按列存儲,而且由矢量 - 列的部分進行處理。這使我們能夠實現高 CPU 性能。
?8. 實時數據更新
ClickHouse 支持主鍵表。為了快速執行對主鍵范圍的查詢,數據使用合并樹 (MergeTree) 進行遞增排序。由于這個原因,數據可以不斷地添加到表中。添加數據時無鎖處理。
?9. 索引
例如,帶有主鍵可以在特定的時間范圍內為特定客戶端(Metrica 計數器)抽取數據,并且延遲時間小于幾十毫秒。
?10. 支持在線查詢
這讓我們使用該系統作為 Web 界面的后端。低延遲意味著可以無延遲實時地處理查詢,而 Yandex.Metrica 界面頁面正在加載(在線模式)。
?11. 支持近似計算
系統包含用于近似計算各種值,中位數和分位數的集合函數。
支持基于部分(樣本)數據運行查詢并獲得近似結果。在這種情況下,從磁盤檢索比例較少的數據。
支持為有限數量的隨機密鑰(而不是所有密鑰)運行聚合。在數據中密鑰分發的特定條件下,這提供了相對準確的結果,同時使用較少的資源。
?12. 數據復制和對數據完整性的支持。
使用異步多主復制。寫入任何可用的副本后,數據將分發到所有剩余的副本。系統在不同的副本上保持相同的數據。數據在失敗后自動恢復
ClickHouse 不完美之處:
不支持事物。
不支持 Update/Delete 操作。
支持有限操作系統。
現在支持 ubuntu,CentOS 需要自己編譯,不過有熱心人已經編譯好了,拿來用就行。對于 Windows 不支持。
?ClickHouse 與已有大數據分析技術有何不同
知道了 ClickHouse 的特性和不完美,下面我們可以對比一下之前的大數據分析跟現在的有啥區別?
| ?代替復雜的多樣大數據技術組合架構
之前的大數據分析,例如 Hadoop 家族由很多技術和框架組合而成,猶如一頭大象被拆分后其實所剩下的價值也就是 HDFS、Kafka、Spark ,其他的幾乎都沒有任何價值。
這些可以用 ClickHouse 一項技術代替。
典型的大數據分析架構 =>ClickHouse
| ?查詢速度快快快
以下為新浪公司實戰得出的測試結果:
集群部署 4 臺機器,每臺機器配置 :CPU E5-2620@2.00GHz ?,開啟超線程后 24core ?,48g 內存,3T × 12 Raid5Select ?count(*) ?300 億 數據 ?0.9 秒
select date, count(*) from xx group by date ?,300 億數據 group by 日期 查詢 9.8 秒
| ?官方壓測
下面是 100M 數據集的跑分結果:ClickHouse 比 Vertia 快約 5 倍,比 Hive 快 279 倍,比 My SQL 快 801 倍;雖然對不同的 SQL 查詢,結果不完全一樣,但是基本趨勢是一致的。ClickHouse 跑分有多塊?舉個例子:ClickHouse 1 秒,Vertica 5.42 秒,Hive 279 秒;
四.ClickHouse 應用場景
自從 ClickHouse2016 年 6 月 15 日開源后,ClickHouse 中文社區隨后成立。中文開源組開始以易觀、新浪、海康威視、美團、京東、58、騰訊、酷狗音樂和俄羅斯開源社區等人員組成,隨著開源社區的不斷活躍,陸續有神州數碼、青云、PingCAP、中軟國際等公司成員加入。一開始只是幾個 ClickHouse 愛好者在群里討論 ClickHouse 技術,后來因為加入的人越來越多,群內分享不太方便,社區建立了 ClickHouse 中文論壇。在交流中,我們了解到一些一線大廠已經把 ClickHouse 運用到生產環境中,社區也從各個公司運用中吸收了經驗。
ClickHouse 目前已經應用于以下場景:
電信行業用于存儲數據和統計數據使用。
新浪微博用于用戶行為數據記錄和分析工作。
用于廣告網絡和 RTB、電子商務的用戶行為分析。
信息安全里面的日志分析。
檢測和遙感信息的挖掘。
商業智能。
網絡游戲以及物聯網的數據處理和價值數據分析。
最大的應用來自于 Yandex 的統計分析服務 Yandex.Metrica,類似于谷歌 Analytics(GA),或友盟統計、小米統計,幫助網站或移動應用進行數據分析和精細化運營工具。據稱 Yandex.Metrica 為世界上第二大的網站分析平臺。ClickHouse 在這個應用中,部署了近四百臺機器,每天支持 200 億的事件和歷史總記錄超過 13 萬億條記錄,這些記錄都存有原始數據(非聚合數據),隨時可以使用 SQL 查詢和分析,生成用戶報告。
五.ClickHouse 和一些技術的比較
商業 OLAP 數據庫
例如:HP Vertica, Actian the Vector,
區別:ClickHouse 是開源而且免費的
云解決方案
例如:亞馬遜 RedShift 和谷歌的 BigQuery
區別:ClickHouse 可以使用自己機器部署,無需為云付費
3.Hadoop 生態軟件
例如:Cloudera Impala, Spark SQL, Facebook Presto , Apache Drill
區別:
ClickHouse 支持實時的高并發系統
ClickHouse 不依賴于 Hadoop 生態軟件和基礎
ClickHouse 支持分布式機房的部署
開源 OLAP 數據庫
例如:InfiniDB, MonetDB, LucidDB
區別:這些項目的應用的規模較小,并沒有應用在大型的互聯網服務當中,相比之下,ClickHouse 的成熟度和穩定性遠遠超過這些軟件。
開源分析,非關系型數據庫
例如:Druid , Apache Kylin
區別:ClickHouse 可以支持從原始數據的直接查詢,ClickHouse 支持類 SQL 語言,提供了傳統關系型數據的便利。
六.總結
在大數據分析領域中,傳統的大數據分析需要不同框架和技術組合才能達到最終的效果,在人力成本,技術能力和硬件成本上以及維護成本讓大數據分析變得成為昂貴的事情。讓很多中小型企業非常苦惱,不得不被迫租賃第三方大型公司的數據分析服務。
ClickHouse 開源的出現讓許多想做大數據并且想做大數據分析的很多公司和企業耳目一新。
ClickHouse 正是以不依賴 Hadoop 生態、安裝和維護簡單、查詢速度快、可以支持 SQL 等特點在大數據分析領域越走越遠。
歡迎工作一到五年的Java工程師朋友們加入Java程序員開發: 854393687
群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!