最近腦細胞休假回家過節,實在找不到更快的分析方法了。在一個晴空萬里的午後,心裏卻烏雲密佈,於是上網刷一刷,忽然發現一匹黑馬,大名ClickHouse,頓時烏雲散去,燦爛的陽光又直射到了那顆有趣的靈魂!
由於做了一段時間大數據架構,喜歡工具之間的比較,於是乎誕生此文,文筆拙劣,望君多多包含!
ClickHouse是戰鬥民族家的‘百度’搞出來的面向OLAP的分佈式列式DBMS,跑分是vertica的5倍,100 million數據集上比vertica快5倍,比Hive快279倍,比MySQL快801倍。1 Billion數據集上比vertica快5倍,mysql和hive已經不行了。聞此消息,喜哉!遂瞭解之。
clickhouse性能比較一, 性能比較二。
數據庫 | ClickHouse |
MySQL |
vertica | PostGreSQL |
描述 | 列式RDBMS | RDBMS | RDBMS | 列式RDBMS |
數據庫模型 | 關係型 | 關係型 | 關係型 | 關係型 |
免費開源 | 是 | 是 | 否 | 是 |
操作系統 | Ubuntu | FreeBSD Linux OS X Solaris Windows |
linux | FreeBSD HP-UX Linux NetBSD OpenBSD OS X Solaris Unix Windows |
API |
CLI HTTP JDBC Native Interface (TCP) |
Proprietary native API ADO.NET JDBC ODBC |
Kafka Proprietary protocol RESTful HTTP API ADO.NET JDBC ODBC |
native C library streaming API for large objects ADO.NET JDBC ODBC |
支持語言 |
PYHTON PHP Go NodesJs Perl Ruby R Scala .Net C++ Java ELixlr Nim |
Ada C C# C++ D Delphi Eiffel Erlang Haskell Java JavaScript (Node.js) Objective-C OCaml Perl PHP Python Ruby Scheme Tcl |
C++ Java Perl Python R |
.Net C C++ Delphi Java Perl PHP Python Tcl |
支持服務器端腳本 | 是 | 是 | 是 | user defined functions |
分區方式 | 分片 | 水平分區,sharding with MySQL Cluster or MySQL Fabric | 分片 | 聲明式分區 |
副本方式 |
multi-master; Replication is only supported for tables in the MergeTree family
|
主-主 主-從 |
主-主 | 主-從 |
mapreduce | 爲什麼還要用mapreduce! | 否 | 是 | 否 |
一致性 | 弱一致 | 強一致 | 強一致 | 強一致 |
外鍵 | yes | yes | yes | yes |
事務性 | 不支持事務 | ACID | ACID | ACID |
約束 | yes | yes | yes |
yes |
持久 | yes | yes、 | yes | yes |
應用場景:
1.絕大多數請求都是用於讀訪問的
2.數據需要以大批次(大於1000行)進行更新,而不是單行更新;或者根本沒有更新操作
3.數據只是添加到數據庫,沒有必要修改
4.讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列
5.表很“寬”,即表中包含大量的列
6.查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)
7.對於簡單查詢,允許大約50毫秒的延遲
8.列的值是比較小的數值和短字符串(例如,每個URL只有60個字節)
9.在處理單個查詢時需要高吞吐量(每臺服務器每秒高達數十億行)
10.不需要事務
11.數據一致性要求較低
12.每次查詢中只會查詢一個大表。除了一個大表,其餘都是小表
13.查詢結果顯著小於數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小