第01期:一文了解 ClickHouse

image

1、簡介

1.1 ClickHouse 是什麼?

ClickHouse 是 Yandex(俄羅斯最大的搜索引擎)開源的一個用於實時數據分析的基於列存儲的數據庫,其處理數據的速度比傳統方法快 100-1000 倍。ClickHouse 的性能超過了目前市場上可比的面向列的 DBMS,每秒鐘每臺服務器每秒處理數億至十億多行和數十千兆字節的數據。html

1.2 ClickHouse的一些特性:

  1. 快速:ClickHouse 會充分利用全部可用的硬件,以儘量快地處理每一個查詢。單個查詢的峯值處理性能超過每秒 2 TB(解壓縮後,僅使用的列)。在分佈式設置中,讀取是在健康副本之間自動平衡的,以免增長延遲。
  2. 容錯:ClickHouse 支持多主機異步複製,而且能夠跨多個數據中心進行部署。全部節點都相等,這能夠避免出現單點故障。單個節點或整個數據中心的停機時間不會影響系統的讀寫可用性。
  3. 可伸縮:ClickHouse 能夠在垂直和水平方向上很好地縮放。ClickHouse 易於調整以在具備數百或數千個節點的羣集上或在單個服務器上,甚至在小型虛擬機上執行。當前,每一個單節點安裝的數據量超過數萬億行或數百兆兆字節。
  4. 易用:ClickHouse 簡單易用,開箱即用。它簡化了全部數據處理:將全部結構化數據吸取到系統中,而且當即可用於構建報告。SQL 容許表達指望的結果,而無需涉及某些 DBMS 中能夠找到的任何自定義非標準 API。
  5. 充分利用硬件:ClickHouse 與具備相同的可用 I/O 吞吐量和 CPU 容量的傳統的面向行的系統相比,其處理典型的分析查詢要快兩到三個數量級。列式存儲格式容許在 RAM 中容納更多熱數據,從而縮短了響應時間。
  6. 提升 CPU 效率:向量化查詢執行涉及相關的 SIMD 處理器指令和運行時代碼生成。處理列中的數據會提升 CPU 行緩存的命中率。
  7. 優化磁盤訪問:ClickHouse 能夠最大程度地減小範圍查詢的次數,從而提升了使用旋轉磁盤驅動器的效率,由於它能夠保持連續存儲數據。
  8. 最小化數據傳輸:ClickHouse 使公司無需使用專門針對高性能計算的專用網絡便可管理其數據。

什麼時候使用 ClickHouse:
用於分析結構良好且不可變的事件或日誌流,建議將每一個此類流放入具備預鏈接維度的單個寬表中。
什麼時候不使用 ClickHouse:
不適合事務性工做負載(OLTP)、高價值的鍵值請求、Blob 或文檔存儲。git

1.3 爲何 ClickHouse 速度這麼快?

首先咱們瞭解一下 OLAP 場景的特色:github

  1. 讀多於寫。
  2. 大寬表,讀大量行可是少許列,結果集較小。
  3. 數據批量寫入,且數據不更新或少更新。

針對分析類查詢,一般只須要讀取表的一小部分列。在列式數據庫中你能夠只讀取你須要的數據。例如,若是隻須要讀取 100 列中的 5 列,這將幫助你最少減小 20 倍的 I/O 消耗。算法

因爲數據老是打包成批量讀取的,因此壓縮是很是容易的。同時數據按列分別存儲這也更容易壓縮。這進一步下降了 I/O 的體積。因爲 I/O 的下降,這將幫助更多的數據被系統緩存。數據庫

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

ClickHouse 從 OLAP 場景需求出發,定製開發了一套全新的高效列式存儲引擎服務器

image

column-oriented  圖片來源見水印相比於行式存儲,列式存儲在分析場景下有着許多優良的特性。網絡

  1. 如前所述,分析場景中每每須要讀大量行可是少數幾個列。在行存模式下,數據按行連續存儲,全部列的數據都存儲在一個 block 中,不參與計算的列在 IO 時也要所有讀出,讀取操做被嚴重放大。而列存模式下,只須要讀取參與計算的列便可,極大的減低了 IO cost,加速了查詢。
  2. 同一列中的數據屬於同一類型,壓縮效果顯著。列存每每有着高達十倍甚至更高的壓縮比,節省了大量的存儲空間,下降了存儲成本。
  3. 更高的壓縮比意味着更小的 data size,從磁盤中讀取相應數據耗時更短。
  4. 自由的壓縮算法選擇。不一樣列的數據具備不一樣的數據類型,適用的壓縮算法也就不盡相同。能夠針對不一樣列類型,選擇最合適的壓縮算法。
  5. 高壓縮比,意味着同等大小的內存可以存放更多數據,系統 cache 效果更好。

2、安裝實踐

2.1 安裝

sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
本案例安裝的是單機版本。yum 安裝會自動建立 clickhouse 用戶。

2.2 修改配置文件

yum 安裝完成以後,配置文件,數據文件日誌目錄設置以下:運維

配置文件目錄:/etc/clickhouse-server/
數據文件目錄:/var/lib/clickhouse/
日誌文件目錄:/var/log/clickhouse-server/

clickhouse 相關的各個目錄能夠在配置文件 /etc/clickhouse-serverconfig.xml 中進行修改。異步

啓動

sudo /etc/init.d/clickhouse-server start

鏈接

clickhouse-client -m #默認以 default 用戶登陸

在 /etc/clickhouse-server/users.xml 中能夠設置其餘用戶的訪問權限等。

clickhouse-client [--user=xxx --password=xxx --host=xxx]

2.3 速度測試

localhost :) SELECT
:-]     C_CITY,
:-]     S_CITY,
:-]     toYear(LO_ORDERDATE) AS year,
:-]     sum(LO_REVENUE) AS revenue
:-] FROM lineorder_flat
:-] WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997
:-] GROUP BY
:-]     C_CITY,
:-]     S_CITY,
:-]     year
:-] ORDER BY
:-]     year ASC,
:-]     revenue DESC;

SELECT 
    C_CITY, 
    S_CITY, 
    toYear(LO_ORDERDATE) AS year, 
    sum(LO_REVENUE) AS revenue
FROM lineorder_flat
WHERE ((C_CITY = 'UNITED KI1') OR (C_CITY = 'UNITED KI5')) AND ((S_CITY = 'UNITED KI1') OR (S_CITY = 'UNITED KI5')) AND (year >= 1992) AND (year <= 1997)
GROUP BY 
    C_CITY, 
    S_CITY, 
    year
ORDER BY 
    year ASC, 
    revenue DESC

┌─C_CITY─────┬─S_CITY─────┬─year─┬────revenue─┐
│ UNITED KI1 │ UNITED KI1 │ 1992 │ 5776096629 │
│ UNITED KI5 │ UNITED KI1 │ 1992 │ 5555883901 │
│ UNITED KI5 │ UNITED KI5 │ 1992 │ 5348705805 │
│ UNITED KI1 │ UNITED KI5 │ 1992 │ 5326870427 │
│ UNITED KI1 │ UNITED KI1 │ 1993 │ 5892974670 │
│ UNITED KI1 │ UNITED KI5 │ 1993 │ 5490859451 │
│ UNITED KI5 │ UNITED KI1 │ 1993 │ 5468354303 │
│ UNITED KI5 │ UNITED KI5 │ 1993 │ 5089909647 │
│ UNITED KI5 │ UNITED KI1 │ 1994 │ 5437315108 │
│ UNITED KI1 │ UNITED KI1 │ 1994 │ 5348775917 │
│ UNITED KI5 │ UNITED KI5 │ 1994 │ 5310936695 │
│ UNITED KI1 │ UNITED KI5 │ 1994 │ 5237461110 │
│ UNITED KI1 │ UNITED KI1 │ 1995 │ 5737551920 │
│ UNITED KI5 │ UNITED KI5 │ 1995 │ 5657584590 │
│ UNITED KI5 │ UNITED KI1 │ 1995 │ 5260093556 │
│ UNITED KI1 │ UNITED KI5 │ 1995 │ 5213763257 │
│ UNITED KI5 │ UNITED KI1 │ 1996 │ 5522325005 │
│ UNITED KI1 │ UNITED KI1 │ 1996 │ 5451244409 │
│ UNITED KI5 │ UNITED KI5 │ 1996 │ 5231759057 │
│ UNITED KI1 │ UNITED KI5 │ 1996 │ 5203962897 │
│ UNITED KI1 │ UNITED KI1 │ 1997 │ 5340760807 │
│ UNITED KI5 │ UNITED KI1 │ 1997 │ 5295685214 │
│ UNITED KI1 │ UNITED KI5 │ 1997 │ 5188428156 │
│ UNITED KI5 │ UNITED KI5 │ 1997 │ 5024634475 │
└────────────┴────────────┴──────┴────────────┘

24 rows in set. Elapsed: 1.723 sec. Processed 546.67 million rows, 4.46 GB (317.28 million rows/s., 2.59 GB/s.)

掃描 1.7 秒處理 546w 的數據量,每秒處理 317w 行數據,速度是至關快了。

3、和其餘列式存儲的對比

沒有銀彈,各類數據存儲類型仍是要結合具體的場景使用。

image

圖片來自 新浪 高鵬的 ppt 目前大量使用 ClickHouse 的互聯網公司:
1. 今日頭條內部用 ClickHouse 來作用戶行爲分析,內部一共幾千個 ClickHouse 節點,單集羣最大 1200 節點,總數據量幾十 PB,日增原始數據 300TB 左右。
2. 騰訊內部用 ClickHouse 作遊戲數據分析,而且爲之創建了一整套監控運維體系。
3. 攜程內部從 18 年 7 月份開始接入試用,目前 80% 的業務都跑在 ClickHouse 上。天天數據增量十多億,近百萬次查詢請求。
4. 快手內部也在使用 ClickHouse,存儲總量大約 10PB, 天天新增 200TB, 90% 查詢小於 3S。
5. 在國外,Yandex 內部有數百節點用於作用戶點擊行爲分析,CloudFlare、Spotify 等頭部公司也在使用。固然還有一些沒有關注到的公司也在大量使用,有興趣的朋友能夠積極嘗試。

4、小結

本文是淺出的介紹了 Clickhouse 的是什麼,有哪些新特性。須要深刻學習仍是要看官方文檔,紙上來得終覺淺,絕知此事要躬行。

參考文章

  1. https://www.cnblogs.com/zhouj...
  2. https://clickhouse.tech/docs/zh/
  3. https://zhuanlan.zhihu.com/p/...
  4. https://github.com/ClickHouse...
    • *

關於 ClickHouse 的技術內容,大家還有什麼想知道的嗎?趕忙留言告訴小編吧!

image

相關文章
相關標籤/搜索