ClickHouse是一個用於數據分析(OLAP)的列式數據庫管理系統(column-oriented DBMS),誕生於“戰鬥民族”俄羅斯,由搜索巨頭Yandex公司開源。目前國內不少大廠在使用,包括騰訊、今日頭條、攜程、快手等,集羣規模多達數千節點,阿里雲更是推出了雲產品ClickHouse。官方介紹:
ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
ClickHouse一定是有不可取代或者不可或缺的特點,才能使得它這麼受青睞。
ClickHouse特點
ClickHouse從OLAP場景需求出發,定製開發了一套全新的高效列式存儲引擎。
列式存儲
ClickHouse是一個列式數據庫,列式就意味着按列存儲與掃描,擁有更小的io操作、更高的壓縮比,非常適合於OLAP場景。列式與行式的差異可見下圖:
速度快
ClickHouse是一個非常快的數據庫系統,數據不僅按列存儲、使用高效壓縮減少io,同時還支持向量化執行引擎,能夠充分使用CPU性能。
ClickHouse不僅查詢快,處理單查詢高吞吐量每臺服務器每秒最多數十億行;寫入速度也非常快,對於大量的數據更新非常適用。
ClickHouse到底有多快?可以參考社區的一個性能測試報表。
另外ClickHouse在單表查詢時表現優秀,領跑其他查詢引擎,參考:
但是在多表關聯查詢時,性能表現相對比較差,更多性能測試報告,可以參見:http://www.clickhouse.com.cn/topic/5c453371389ad55f127768ea。
功能豐富
在使用方面,除了速度快,ClickHouse支持大部分的SQL語法,不過目前還有一定限制;ClickHouse支持實時的數據更新,適用於在線查詢。ClickHouse具有良好的可擴展性,支持單節點與分佈式部署,可以擴展到成百上千個節點,單個節點可容納萬億行數據或超過100TB數據。此外,ClickHouse還支持主鍵索引、稀疏索引、數據Sharding、數據Partitioning、TTL、主備複製等特性,參見文末鏈接的文章。
接下來我們看一看 ClickHouse有哪些應用場景和使用限制。
應用場景與限制
ClickHouse的應用場景:
1.
絕大多數請求都是用於讀訪問的2.
數據需要以大批次(大於1000行)進行更新,而不是單行更新;或者根本沒有更新操作3.
數據只是添加到數據庫,沒有必要修改4.
讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列5.
表很“寬”,即表中包含大量的列6.
查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)7.
對於簡單查詢,允許大約50毫秒的延遲8.
列的值是比較小的數值和短字符串(例如,每個URL只有60個字節)9.
在處理單個查詢時需要高吞吐量(每臺服務器每秒高達數十億行)10.
不需要事務11.
數據一致性要求較低12.
每次查詢中只會查詢一個大表。除了一個大表,其餘都是小表13.
查詢結果顯著小於數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小
相應地,使用ClickHouse也有其本身的限制:
1.
不支持真正的刪除/更新支持 不支持事務(期待後續版本支持)2.
不支持二級索引(PS:新版本中已經支持)3.
有限的SQL支持,join實現與衆不同4.
不支持窗口功能5.
元數據管理需要人工干預維護
ClickHouse因性能卓越,被廣泛應用於各種分析場景(特別是單表查詢),例如用戶行爲分析、日誌分析等。我們先從這幾個方面認識下ClickHouse,對其有一個大概的瞭解。
參考:
https://clickhouse.tech/docs/en/
https://zhuanlan.zhihu.com/p/98135840
https://zhuanlan.zhihu.com/p/22165241
https://zhuanlan.zhihu.com/p/71014268
往期推薦