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).