ClickHouse深度揭秘

2021-01-08 騰訊網

ClickHouse是一個用於聯機分析(OLAP)的列式資料庫管理系統(DBMS)。ClickHouse是近年來備受關注的開源列式資料庫,主要用於數據分析(OLAP)領域。目前國內社區火熱,各個大廠紛紛跟進大規模使用:今日頭條 內部用ClickHouse來做用戶行為分析,內部一共幾千個ClickHouse節點,單集群最大1200節點,總數據量幾十PB,日增原始數據300TB左右。

哪些公司使用這款開源列式資料庫

今日頭條內部用ClickHouse來做用戶行為分析,內部一共幾千個ClickHouse節點,單集群最大1200節點,總數據量幾十PB,日增原始數據300TB左右。

騰訊內部用ClickHouse做遊戲數據分析,並且為之建立了一整套監控運維體系。

攜程內部從18年7月份開始接入試用,目前80%的業務都跑在ClickHouse上。每天數據增量十多億,近百萬次查詢請求。

快手內部也在使用ClickHouse,存儲總量大約10PB, 每天新增200TB, 90%查詢小於3S。

在傳統的行式資料庫系統中,數據按如下順序存儲:

處於同一行中的數據總是被物理的存儲在一起。

常見的行式資料庫系統有: MySQL、Postgres和MS SQL Server。

在列式資料庫系統中,數據按如下的順序存儲:

該示例中只展示了數據在列式資料庫中數據的排列順序。

對於存儲而言,列式資料庫總是將同一列的數據存儲在一起,不同列的數據也總是分開存儲。

常見的列式資料庫有: Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。

不同的存儲方式適合不同的場景,這裡的查詢場景包括: 進行了哪些查詢,多久查詢一次以及各類查詢的比例; 每種查詢讀取多少數據————行、列和字節;讀取數據和寫入數據之間的關係;使用的數據集大小以及如何使用本地的數據集;是否使用事務,以及它們是如何進行隔離的;數據的複製機制與數據的完整性要求;每種類型的查詢要求的延遲與吞吐量等等。

系統負載越高,根據使用場景進行定製化就越重要,並且定製將會變的越精細。沒有一個系統同樣適用於明顯不同的場景。如果系統適用於廣泛的場景,在負載高的情況下,所有的場景可以會被公平但低效處理,或者高效處理一小部分場景。

OLAP場景的關鍵特徵

大多數是讀請求

數據總是以相當大的批(> 1000 rows)進行寫入

不修改已添加的數據

每次查詢都從資料庫中讀取大量的行,但是同時又僅需要少量的列

寬表,即每個表包含著大量的列

較少的查詢(通常每臺伺服器每秒數百個查詢或更少)

對於簡單查詢,允許延遲大約50毫秒

列中的數據相對較小: 數字和短字符串(例如,每個URL 60個字節)

處理單個查詢時需要高吞吐量(每個伺服器每秒高達數十億行)

事務不是必須的

對數據一致性要求低

每一個查詢除了一個大表外都很小

查詢結果明顯小於源數據,換句話說,數據被過濾或聚合後能夠被盛放在單臺伺服器的內存中

列式資料庫更適合OLAP場景的原因

行式

列式

看到差別了麼?下面將詳細介紹為什麼會發生這種情況。

輸入/輸出

針對分析類查詢,通常只需要讀取表的一小部分列。在列式資料庫中你可以只讀取你需要的數據。例如,如果只需要讀取100列中的5列,這將幫助你最少減少20倍的I/O消耗。

由於數據總是打包成批量讀取的,所以壓縮是非常容易的。同時數據按列分別存儲這也更容易壓縮。這進一步降低了I/O的體積。

由於I/O的降低,這將幫助更多的數據被系統緩存。

例如,查詢 統計每個廣告平臺的記錄數量 需要讀取 廣告平臺ID 這一列,它在未壓縮的情況下需要1個字節進行存儲。如果大部分流量不是來自廣告平臺,那麼這一列至少可以以十倍的壓縮率被壓縮。當採用快速壓縮算法,它的解壓速度最少在十億字節(未壓縮數據)每秒。換句話說,這個查詢可以在單個伺服器上以每秒大約幾十億行的速度進行處理。這實際上是當前實現的速度。

CPU

由於執行一個查詢需要處理大量的行,因此在整個向量上執行所有操作將比在每一行上執行所有操作更加高效。同時這將有助於實現一個幾乎沒有調用成本的查詢引擎。如果你不這樣做,使用任何一個機械硬碟,查詢引擎都不可避免的停止CPU進行等待。所以,在數據按列存儲並且按列執行是很有意義的。

有兩種方法可以做到這一點:

向量引擎:所有的操作都是為向量而不是為單個值編寫的。這意味著多個操作之間的不再需要頻繁的調用,並且調用的成本基本可以忽略不計。操作代碼包含一個優化的內部循環。

代碼生成:生成一段代碼,包含查詢中的所有操作。

這是不應該在一個通用資料庫中實現的,因為這在運行簡單查詢時是沒有意義的。但是也有例外,例如,MemSQL使用代碼生成來減少處理SQL查詢的延遲(只是為了比較,分析型資料庫通常需要優化的是吞吐而不是延遲)。

請注意,為了提高CPU效率,查詢語言必須是聲明型的(SQL或MDX), 或者至少一個向量(J,K)。 查詢應該只包含隱式循環,允許進行優化。

相關焦點

  • ClickHouse國家級項目最佳實踐
    (2)       部署包說明ClickHouse安裝部署需要四個安裝包:clickhouse-client.rpmclickhouse-common-static.rpmclickhouse-server.rpmclickhouse-server-common4.rpm(3)       部署方式
  • ClickHouse 新特性 Live View 體驗
    下載鏡像$ docker pull yandex/clickhouse-server:20.1.7.38$ docker pull yandex/clickhouse-client:20.1.7.38啟動 ClickHouse Server$ docker run -d --name clickhouse-ma --ulimit nofile=
  • 百分點大數據技術團隊:ClickHouse國家級項目最佳實踐
    (2)部署包說明ClickHouse安裝部署需要四個安裝包:clickhouse-client.rpmclickhouse-common-static.rpmclickhouse-server.rpmclickhouse-server-common4.rpm
  • 用ClickHouse在GitHub上數星星
    下載數據文件wget https://datasets.clickhouse.tech/github_events_v2.native.xz# 2.導入數據xz -d < github_events_v2.native.xz | clickhouse-client --query "INSERT INTO test.github_events FORMAT Native"# 4. 可以看到導入速度還是很快的
  • 淺談clickhouse的Mutation機制(附源碼分析)
    其實在20.12版本,clickhouse把後臺的merge\ttl\mutation都抽象成了job。MergeTree Mutation功能介紹ClickHouse內核中的MergeTree存儲一旦生成一個Data Part,這個Data Part就不可再更改了。
  • 大數據實時分析領域的黑馬ClickHouse中國區第一次Meetup
    多支國內頂尖參賽隊伍中,在比賽的眾多苛刻軟硬體環境下,開源組第一名使用的ClickHouse以速度驚人的成績最終摘得了此次大賽桂冠,贏得了10萬獎金,ClickHouse「一戰成名」,易觀CTO郭煒同時發起了ClickHouse中國區用戶組社區「ClickHouse User Group in China」,越來越多的對ClickHouse感興趣的夥伴加入了該社區,社區地址:ClickHouse中文社區 (www.clickhouse.com.cn
  • 騰訊大牛教你ClickHouse實時同步MySQL數據
    Canal-Adapter組件部署(只針對方案一)  Canal-Adapter的主要作用是通過JDBC接口寫入ClickHouse數據,可以配置多個表的寫入;  1)下載canal.adapter-1.1.4.tar.gz,解壓;  2)在lib目錄下新增clickhouse驅動jar包及httpclient的jar包 httpcore-
  • 少兒英語歌曲:Up on the Housetop 爬上屋頂
    Up on the Housetop 爬上屋頂歌詞:   Up on the housetop reindeer pause   Out jumps good old Santa Claus   Down through the chimney with lots of toys
  • Kylin、Druid、ClickHouse核心技術對比
    05ClickHouse索引結構(只討論MergeTree引擎)因為Clickhouse數據模型就是普通二維表,這裡不做介紹,只討論索引結構。整體上Clickhouse的索引也是列式索引結構,每個列一個文件。
  • Open House for Year 7 to Year 11 Applicants
    YK Pao School's Secondary Division cordially invites you to attend an open house
  • Click是什麼意思?鍵盤上的Click鍵在哪裡?
    答:click在電腦中通常譯為:點擊. 也就是點擊進入黃金屋Clickwraps?答:「點擊生效」的意思範例:生效的許可協議 Clickwrap licenses開封生效的許可協議 shrinkwrap licenses點擊生效的合同 Clickwrap Contractvape驅蚊器?
  • click是點擊,那click into place是說點擊對地方嗎
    大家好,歡迎來到英語乾貨接,今天分享一個習語「click into place」 它可不是點擊對地方,其正確含義是:click into place|suddenly become clear or understood. 茅塞頓開,豁然開朗。
  • PB級數據實時分析,ClickHouse到底有多彪悍?
    參考資料:[1] https://github.com/ClickHouse/ClickHouse[2] https://github.com/ClickHouse/clickhouse-presentations[3] https://cloud.tencent.com/developer/article/1637840
  • Click#15:這不是最好的夏天 但也足夠好了
    「我覺得click#15可能已經到頭了,」第一次與Mr.Woohoo PK落敗時,Ricky在後臺接受採訪時就充滿沮喪。節目裡樂隊們玩鬧在一起的狀態是真的,淘汰賽制下的激烈競爭也是真的,沒有人想要輸,尤其是click#15這樣急切需要機會的新人樂隊。節目伊始,他們曾放出豪言,「我們是中國最好的funk樂隊,沒有之一。」
  • Links(HREF元素)的click方法
    關鍵字:javascript, href, click, method對於HTML頁面上的超連結(HREF),並不是所有的瀏覽器都支持其click方法。在IE瀏覽器(4.0以上版本)中,我們可以使用click方法來模擬一個超連結的點擊操作。
  • 「click the link」是什麼意思?
    click the link:點擊連結。If you are interested, please clickthe link for details.If you've forgotten your login ID of blog, click this link please.如果忘記了自己博客的註冊帳號就點擊此連結。
  • Birth of Sohu House-Auto Zone
    Ordinary consumers often put house and auto together for a comprehensive consideration.A variety of exciting activities organized by Sohu can also be found here: Sohu exclusive offers of house and auto purchase, hot property, the Auto discount information, shopping guide on house and auto
  • click不是點擊嗎?I think we two really click.這句怎麼理解
    其實,I think we two really click.這個句子的意思是「我覺得我們蠻合拍的。」在搭訕或邀約時,這個句子比較常用。把兩個形狀剛好相匹配的東西拼在一起時常發出「咔噠」一聲,這個聲音和這個動作就叫做click,因此這個詞才會延伸用來表示兩個人十分合拍、一拍即合。另外,在這個電腦普及的時代,click這個單詞還有個所有人都該熟知的意思,就是點擊電腦的滑鼠這個動作,因為點滑鼠也會發出「咔噠」的聲音。
  • 黑馬再現 開源的ClickHouse或將成為大數據實時分析主流選擇
    而在採集數據的過程中,一次頁面 click(點擊),會產生一個 event(事件)。至此,整個系統的邏輯就十分清晰了,那就是基於頁面的點擊事件流,面向數據倉庫進行 OLAP 分析。
  • Click and collect引領時尚購物
    order goods from a store's website and collect them from a local branch一種購物設施,顧客可以藉此從商家的網站上購買或訂購貨物,然後到當地的分支機構取貨Example:Delivery is free on all orders over £75 or you can opt for click