ClickHouse
ClickHouse是一個用於線上分析處理(OLAP)的開源列式資料庫。
開發者 | ClickHouse Inc 及 ClickHouse開源社區 |
---|---|
首次發佈 | 2016年6月15日 |
目前版本 | |
原始碼庫 | |
程式語言 | C++ |
作業系統 | Linux, macOS |
許可協定 | Apache License 2.0 |
網站 | clickhouse |
ClickHouse是由俄羅斯IT公司Yandex為Yandex.Metrica網絡分析服務開發的。[3][4][5][6] ClickHouse允許分析即時更新的數據。該系統以高效能為目標。[7]
這個專案是在2016年6月發佈的Apache許可證下的開源軟件。[8]
Yandex.Tank負載測試工具使用ClickHouse。[8] Yandex.Market使用ClickHouse來監控網站的可訪問性和KPI。[9] ClickHouse還在CERN的LHCb實驗[10]中實現了對100億個事件的元數據進行儲存和處理,每個事件有超過1000個屬性,Tinkoff Bank使用ClickHouse作為專案的數據儲存。[11]
歷史
Yandex.Metrica以前使用一種經典的方法,即以聚合形式儲存原始數據。[12] 這種方法可以幫助減少儲存的數據量。然而,它有幾個局限性和缺點:
- 可用報表的列表必須是預先確定的,而且無法生成自訂報表。
- 聚合之後,數據量可能會增加。當數據由大量鍵進行聚合或使用具有高基數的鍵(如URL)時,就會發生這種情況。
- 對於具有不同聚合的報表,很難支援邏輯一致性。
另一種方法是儲存未聚合的數據。處理原始數據需要高效能的系統,因為所有計算都是即時進行的。為了解決這個問題,需要一個能夠處理整個互聯網規模的分析數據的列式資料庫。Yandex開始開發自己的列式資料庫。 ClickHouse的第一個原型在2009年出現。2014年底,Yandex.Metrica 2.0版發佈。新版本有一個用於建立自訂報告的介面,並使用ClickHouse儲存和處理數據。
ClickHouse Inc.於2021年9月在加州三藩市成立,以持續發展ClickHouse;最初由Index Ventures、Benchmark Capital和Yandex共投資 5000 萬美元。2021年10月Coatue Management、Altimeter Capital等B輪融資2.5億美元,使公司估值達20億美元。直至2023年ClickHouse Inc員工人數為120人。
功能
Clickhouse DBMS 的主要功能是:[13]
- 真正的列式資料庫。 沒有任何內容與值一起儲存。例如,支援常數長度值,以避免將它們的長度「 number」儲存在值的旁邊。
- 線性可延伸性。 可以通過添加伺服器來擴充叢集。
- 容錯性。 系統是一個分片叢集,其中每個分片都是一組副本。ClickHouse使用非同步多主複製。數據寫入任何可用的副本,然後分發給所有剩餘的副本。Zookeeper用於協調行程,但不涉及查詢處理和執行。
- 能夠儲存和處理數PB的數據。
- SQL支援。 Clickhouse支援類似SQL的擴充語言,包括陣列和巢狀數據結構、近似函數和URI函數,以及連接外部鍵值儲存的可用性。
- 高效能。[14]
- 數據壓縮。
- HDD最佳化。 該系統可以處理不適合主記憶體的數據。
- 用於資料庫(DB)連接的客戶端。 資料庫連接方式包括控制台客戶端、HTTP API,或者各種程式語言的wrapper(可以用的有Python、PHP[15]、NodeJS[16]、Perl[17]、Ruby[18]與R[19]語言)。ClickHouse也可以使用JDBC驅動。[20]
- 詳細的文件。(頁面存檔備份,存於互聯網檔案館)
限制
Clickhouse有一些可以被視為缺點的特點:
- 不支援事務。
- 預設情況下,在執行聚合時,查詢中間狀態必須適合單個伺服器上的RAM。但是,在這種情況下,可以將ClickHouse組態為溢位到磁碟上來解決。
- 缺乏完整的UPDATE/DELETE實現。
使用場景
- 它可以處理少量包含大量欄位的表。
- 查詢可以使用從資料庫中提取的大量行,但只用一小部分欄位。
- 查詢相對較少(通常每台伺服器大約100個RPS)。
- 對於簡單的查詢,允許大約50毫秒的延遲。
- 列值相當小,通常由數字和短字串組成(例如每個URL,60位元組)。
- 處理單個查詢時需要高吞吐量(每台伺服器每秒數十億行)。
- 查詢結果主要是過濾或聚合的。
- 數據更新使用簡單的場景(通常只是批次處理,沒有複雜的事務)。
ClickHouse的一個常見情況是伺服器紀錄檔分析。在將常規數據上載到ClickHouse之後(建議將數據每次1000條以上批次插入),就可以通過即時查詢分析事件或監視服務的指標,如錯誤率、響應時間等。
ClickHouse還可以用作內部分析師的內部數據倉庫。ClickHouse可以儲存來自不同系統的數據(比如Hadoop或某些紀錄檔),分析人員可以使用這些數據構建內部指示板,或者為了業務目的執行即時分析。
基準測試結果
根據開發人員進行的基準測試,[14] 對於OLAP查詢,ClickHouse的速度比Hive(基於Hadoop技術棧的DBMS)或MySQL(通用RDBMS)快100倍以上。
商業實現
- Altinity
- ClickHouse Inc
- Firebolt
參考文獻
- ^ https://github.com/ClickHouse/ClickHouse/releases/tag/v22.3.2.2-lts; 出版日期: 2022年3月17日; 檢索日期: 2022年3月25日.
- ^ Release 24.1.5.6. 2024年2月14日 [2024年2月19日].
- ^ Usage Statistics and Market Share of Traffic Analysis Tools for Websites, November 2016. w3techs.com. [2016-11-10]. (原始內容存檔於2014-01-21).
- ^ Datanyze. Analytics Market Share Report | Competitor Analysis | Google Analytics, Google Universal Analytics, Yandex Metrica. Datanyze. [2016-11-10]. (原始內容存檔於2016-10-21) (美國英語).
- ^ Wappalyzer. Analytics. wappalyzer.com. 2011-12-30 [2016-11-10]. (原始內容存檔於2017-05-12).
- ^ Analytics - SEOMON.com. seomon.com. [2016-11-10]. (原始內容存檔於2016-10-12).
- ^ ClickHouse: High-Performance Distributed DBMS for Analytics | Percona Live Amsterdam - Open Source Database Conference 2016. www.percona.com. [2016-11-10]. (原始內容存檔於2016-10-21).
- ^ 8.0 8.1 Яндекс открывает ClickHouse. [2016-11-10]. (原始內容存檔於2016-10-21).
- ^ Здоровье Маркета: как мы превращаем логи в графики, Дмитрий Андреев (Яндекс) — События Яндекса. events.yandex.ru. [2016-11-10]. (原始內容存檔於2017-08-30).
- ^ Yandex — Yandex Launches Search Tool for LHC Events at CERN. Yandex. [2016-11-10]. (原始內容存檔於2016-10-20).
- ^ Сравнение аналитических in-memory баз данных. [2016-11-10]. (原始內容存檔於2016-10-21).
- ^ Эволюция структур данных в Яндекс.Метрике. [2016-11-10]. (原始內容存檔於2016-12-28).
- ^ 13.0 13.1 ClickHouse Guide. clickhouse.yandex. [2016-11-10]. (原始內容存檔於2016-11-11).
- ^ 14.0 14.1 Performance comparison of analytical DBMS. clickhouse.yandex. [2016-11-10]. (原始內容存檔於2016-10-20).
- ^ smi2/phpClickHouse. GitHub. [2016-11-10]. (原始內容存檔於2019-09-24).
- ^ apla/node-clickhouse. GitHub. [2016-11-10]. (原始內容存檔於2019-09-24).
- ^ elcamlost/perl-DBD-ClickHouse. GitHub. [2016-11-10]. (原始內容存檔於2018-06-12).
- ^ archan937/clickhouse. GitHub. [2016-11-10]. (原始內容存檔於2018-06-12).
- ^ hannesmuehleisen/clickhouse-r. GitHub. [2016-11-10]. (原始內容存檔於2019-09-24).
- ^ yandex/clickhouse-jdbc. GitHub. [2016-11-10]. (原始內容存檔於2019-09-24).