頭條創(chuàng)作挑戰(zhàn)賽#
Clickhouse官網(wǎng)為:https://clickhouse.tech/
在官網(wǎng)中可以看到ClickHouse可以基于多種方式安裝,rpm安裝、tgz安裝包安裝、docker鏡像安裝、源碼編譯安裝等。這里我們使用rpm安裝包安裝。目前Clickhouse僅支持Linux系統(tǒng)且cpu必須支持SSE4.2指令集,可以通過以下命令查詢Linux是否支持:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
如果服務(wù)器不支持SSE4.2指令集,則不能下載預(yù)編譯安裝包,需要通過源碼編譯特定版本進(jìn)行安裝。
ClickHouse rpm安裝包查詢地址為:https://packagecloud.io/Altinity/clickhouse
這里需要在linux中使用wget命令下載對(duì)應(yīng)的clickHouse版本。選擇一臺(tái)服務(wù)器創(chuàng)建/software目錄并進(jìn)入此目錄,在當(dāng)前目錄下執(zhí)行如下命令下載ClickHouse需要的rpm安裝包,這里只需要下載以下四個(gè)rpm安裝包即可。
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-client-20.8.3.18-1.el7.x86_64.rpm/download.rpm
選擇一臺(tái)服務(wù)器,將下載好的clickHouse安裝包直接安裝即可,安裝順序如下:
rpm -ivh clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-client-20.8.3.18-1.el7.x86_64.rpm
這里也可以在當(dāng)前節(jié)點(diǎn)直接執(zhí)行如下命令,也可以按照依賴關(guān)系安裝各個(gè)rpm包:
rpm -ivh ./clickhouse-*.rpm
Preparing... ################################# [100%]
Updating / installing...
1:clickhouse-server-common-20.8.3.1################################# [ 25%]
2:clickhouse-common-static-20.8.3.1################################# [ 50%]
3:clickhouse-server-20.8.3.18-1.el7################################# [ 75%]
Create user clickhouse.clickhouse with datadir /var/lib/clickhouse
4:clickhouse-client-20.8.3.18-1.el7################################# [100%]
Create user clickhouse.clickhouse with datadir /var/lib/clickhouse
安裝完成之后會(huì)生成如下對(duì)應(yīng)的目錄,每個(gè)目錄的介紹如下:
clickhouse:主程序可執(zhí)行文件
clickhouse-server:一個(gè)指向clickhouse可執(zhí)行文件的軟連接,供服務(wù)端啟動(dòng)使用。
clickhouse-client:一個(gè)指向clickhouse可執(zhí)行文件的軟連接,供客戶端啟動(dòng)使用。
啟動(dòng)clickhouse-server服務(wù):
service clickhouse-server start
啟動(dòng)clickhouse服務(wù)后可以使用命令行客戶端連接到服務(wù):
# client客戶端連接到ch服務(wù)
clickhouse-client
# 或者使用命令:
clickhouse-client --host localhost --port 9000
ClickHouse client version 20.8.3.18.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.8.3 revision 54438.node1 :)
#查看9000 端口占用情況
[root@node5 bin]# yum install net-tools
[root@node5 bin]# netstat -tunlp |grep 9000
#查看當(dāng)前所有數(shù)據(jù)庫
show databases;
┌─name───────────────────────────┐
│ _temporary_and_external_tables │
│ default │
│ system │
└────────────────────────────────┘
???????????
#查看當(dāng)前使用的數(shù)據(jù)庫
select database();
┌─database()─┐
│ default │
└────────────┘
#退出客戶端
quit;
關(guān)閉ClickHouse服務(wù):
service clickhouse-server stop
Clickhouse支持分布式搭建,搭建步驟如下:
1.1、選擇三臺(tái)clickhouse節(jié)點(diǎn),在每臺(tái)節(jié)點(diǎn)上安裝clickhouse需要的安裝包
這里選擇node1、node2,node3三臺(tái)節(jié)點(diǎn),分別按照clickhouse單節(jié)點(diǎn)安裝方式在每臺(tái)節(jié)點(diǎn)上安裝clickhouse。
1.2、安裝zookeeper集群并啟動(dòng)
搭建Clickhouse集群時(shí),需要使用Zookeeper去實(shí)現(xiàn)集群副本之間的同步,所以這里需要zookeeper集群,zookeeper集群安裝后可忽略此步驟。
1.3、配置外網(wǎng)可訪問
在每臺(tái)clickhouse節(jié)點(diǎn)中配置/etc/clickhouse-server/config.xml文件第114行<listen_host>,如下:
<listen_host>::</listen_host>
1.4、在每臺(tái)節(jié)點(diǎn)/etc/目錄下創(chuàng)建metrika.xml文件,寫入以下內(nèi)容
在node1、node2、node3節(jié)點(diǎn)上/etc/下配置metrika.xml文件:
vim /etc/metrika.xml
<yandex>
<clickhouse_remote_servers>
<clickhouse_cluster_3shards_1replicas>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>node1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<internal_replication>true</internal_replication>
<host>node2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>node3</host>
<port>9000</port>
</replica>
</shard>
</clickhouse_cluster_3shards_1replicas>
</clickhouse_remote_servers>
<zookeeper-servers>
<node index="1">
<host>node3</host>
<port>2181</port>
</node>
<node index="2">
<host>node4</host>
<port>2181</port>
</node>
<node index="3">
<host>node5</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<replica>01</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
對(duì)以上配置文件中配置項(xiàng)的解釋如下:
clickhouse集群配置標(biāo)簽,固定寫法。
配置clickhouse的集群名稱,可自由定義名稱,注意集群名稱中不能包含點(diǎn)號(hào)。這里代表集群中有3個(gè)分片,每個(gè)分片有1個(gè)副本。
分片是指包含部分?jǐn)?shù)據(jù)的服務(wù)器,要讀取所有的數(shù)據(jù),必須訪問所有的分片。
副本是指存儲(chǔ)分片備份數(shù)據(jù)的服務(wù)器,要讀取所有的數(shù)據(jù),訪問任意副本上的數(shù)據(jù)即可。
分片,一個(gè)clickhouse集群可以分多個(gè)分片,每個(gè)分片可以存儲(chǔ)數(shù)據(jù),這里分片可以理解為clickhouse機(jī)器中的每個(gè)節(jié)點(diǎn)。這里可以配置一個(gè)或者任意多個(gè)分片,在每個(gè)分片中可以配置一個(gè)或任意多個(gè)副本,不同分片可配置不同數(shù)量的副本。如果只是配置一個(gè)分片,這種情況下查詢操作應(yīng)該稱為遠(yuǎn)程查詢,而不是分布式查詢。
每個(gè)分片的副本,默認(rèn)每個(gè)分片配置了一個(gè)副本。也可以配置多個(gè)。如果配置了副本,讀取操作可以從每個(gè)分片里選擇一個(gè)可用的副本。如果副本不可用,會(huì)依次選擇下個(gè)副本進(jìn)行連接。該機(jī)制利于系統(tǒng)的可用性。
默認(rèn)為false,寫數(shù)據(jù)操作會(huì)將數(shù)據(jù)寫入所有的副本,設(shè)置為true,寫操作只會(huì)選擇一個(gè)正常的副本寫入數(shù)據(jù),數(shù)據(jù)的同步在后臺(tái)自動(dòng)進(jìn)行。
配置的zookeeper集群
區(qū)分每臺(tái)clickhouse節(jié)點(diǎn)的宏配置,每臺(tái)clickhouse需要配置不同名稱。
這里配置ip為“::/0”代表任意IP可以訪問,包含IPv4和IPv6。
注意:允許外網(wǎng)訪問還需配置/etc/clickhouse-server/config.xml 參照第三步驟。
MergeTree引擎表的數(shù)據(jù)壓縮設(shè)置,min_part_size:代表數(shù)據(jù)部分最小大小。min_part_size_ratio:數(shù)據(jù)部分大小與表大小的比率。method:數(shù)據(jù)壓縮格式。
注意:需要在每臺(tái)clickhouse節(jié)點(diǎn)上配置metrika.xml文件,并且修改每個(gè)節(jié)點(diǎn)的 macros配置名稱。
1.5、在每臺(tái)節(jié)點(diǎn)上啟動(dòng)clickhouse服務(wù)
首先啟動(dòng)zookeeper集群,然后分別在node1、node2、node3節(jié)點(diǎn)上啟動(dòng)clickhouse服務(wù),這里每臺(tái)節(jié)點(diǎn)和單節(jié)點(diǎn)啟動(dòng)一樣。啟動(dòng)之后,clickhouse集群配置完成。
service clickhouse-server start
1.6、檢查集群配置是否完成
在node1、node2、node3任意一臺(tái)節(jié)點(diǎn)進(jìn)入clickhouse客戶端,查詢集群配置:
#選擇三臺(tái)clickhouse任意一臺(tái)節(jié)點(diǎn),進(jìn)入客戶端
clickhouse-client
#查詢集群信息,看到下圖所示即代表集群配置成功。
node1 :) select * from system.clusters;
以上介紹clickhouse安裝方式是下載好rpm包之后進(jìn)行安裝,我們也可以自己配置clickhouse的yum源,直接使用yum命令進(jìn)行安裝,不過這個(gè)過程是從外網(wǎng)直接下載clickhouse安裝包之后自動(dòng)進(jìn)行安裝。配置如下:
選擇需要安裝clickhouse的節(jié)點(diǎn)執(zhí)行如下命令,添加clickhouse的官方y(tǒng)um源:
[root@node1 ~]# yum -y install yum-utils
[root@node1 ~]# rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
[root@node1 ~]# yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
Loaded plugins: fastestmirror
adding repo from: https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
[repo.yandex.ru_clickhouse_rpm_stable_x86_64]
name=added from: https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
baseurl=https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
enabled=1
yum -y install clickhouse-server clickhouse-client
經(jīng)過以上兩個(gè)步驟即可完成安裝,這里安裝單機(jī)和安裝集群都可以使用以上這種模式。
注意:在Centos7 中采用配置yum 源方式安裝ClickHouse啟動(dòng)時(shí)使用命令:systemctl start clickhouse-server
ClickHouse是一個(gè)高性能且開源的數(shù)據(jù)庫管理系統(tǒng),主要用于在線分析處理(OLAP)業(yè)務(wù)。它采用列式存儲(chǔ)結(jié)構(gòu),可使用SQL語句實(shí)時(shí)生成數(shù)據(jù)分析報(bào)告,另外它還支持索引,分布式查詢以及近似計(jì)算等特性,憑借其優(yōu)異的表現(xiàn),ClickHouse在各大互聯(lián)網(wǎng)公司均有廣泛地應(yīng)用。
ClickHouse 是俄羅斯的 Yandex 于 2016 年開源的用于在線分析處理查詢(OLAP :Online Analytical Processing)MPP架構(gòu)的列式存儲(chǔ)數(shù)據(jù)庫(DBMS:Database Management System),能夠使用 SQL 查詢實(shí)時(shí)生成分析數(shù)據(jù)報(bào)告。ClickHouse的全稱是Click Stream,Data WareHouse。
官網(wǎng):https://clickhouse.com/
中文官網(wǎng):https://clickhouse.com/docs/zh
相比于其它的列式數(shù)據(jù)庫,ClickHouse的以下特性決定了它更適用于OLAP業(yè)務(wù)場(chǎng)景
上面只列舉了一些最具代表性的功能,但這已然足以表明為什么 ClickHouse 稱得上是 DBMS 了。
但是注意,ClickHouse 雖然很優(yōu)秀,但它畢竟是一款面向 OLAP 的數(shù)據(jù)庫,我們不能把它用于任何 OLTP 事務(wù)性操作的場(chǎng)景,因?yàn)樗幸韵聨c(diǎn)不足:
不過這些不足并不能算是 ClickHouse 的缺點(diǎn),事實(shí)上其它的同類高性能面向 OLAP 的數(shù)據(jù)庫一樣不擅長上面這些。因?yàn)閷?duì)于 OLAP 數(shù)據(jù)庫而言,上述這些能力不是重點(diǎn),只能說這是為了極致的查詢性能所做的權(quán)衡
下載地址:docker-toolbox-mac-docker-for-mac安裝包下載_開源鏡像站-阿里云
Mac最新Docker.dmg下載地址
https://mirrors.aliyun.com/docker-toolbox/
https://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/
ClickHouse只能在linux安裝 所以在Mac下 我是通過Docker安裝的
clickhouse-server 安裝
a123456@luludeMBP-2 ~ % docker pull yandex/clickhouse-server
Using default tag: latest
latest: Pulling from yandex/clickhouse-server
ea362f368469: Pull complete
38ba82a23e2b: Pull complete
9b17d04b6c62: Pull complete
5658714e4e8b: Pull complete
6bde977a0bf8: Pull complete
39053b27290b: Pull complete
762d3d237065: Pull complete
Digest: sha256:1cbf75aabe1e2cc9f62d1d9929c318a59ae552e2700e201db985b92a9bcabc6e
Status: Downloaded newer image for yandex/clickhouse-server:latest
docker.io/yandex/clickhouse-server:latest
clickhouse-client 安裝
a123456@luludeMBP-2 ~ % docker pull yandex/clickhouse-client
Using default tag: latest
latest: Pulling from yandex/clickhouse-client
2f94e549220a: Pull complete
a72d8599d7c2: Pull complete
e9232762ed9d: Downloading [============================> ] 134.5MB/235MB
29c8f4b1e77e: Download complete
e9232762ed9d: Pull complete
29c8f4b1e77e: Pull complete
Digest: sha256:9ae2ee421c9c9f00406a39a1174276aa23abb7fceac13b40578b18eeaa9bc4d1
Status: Downloaded newer image for yandex/clickhouse-client:latest
docker.io/yandex/clickhouse-client:latest
啟動(dòng)server端
yangyanpingdeMacBook-Air:~ yangyanping$
docker run -d --name ch-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 yandex/clickhouse-server
9a8fd6ba268fb6567af1f5a92d9a93467d89411ebae195a5ccc1e88a7cbbcca7
啟動(dòng) clickhouse-client
a123456@luludeMBP-2 ~ % docker run -it --rm --link ch-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server
ClickHouse client version 22.1.3.7 (official build).
Connecting to clickhouse-server:9000 as user default.
Connected to ClickHouse server version 22.1.3 revision 54455.
SHOW DATABASES
打印所有的數(shù)據(jù)庫列表,該查詢等同于
SELECT name FROM system.databases [INTO OUTFILE filename] [FORMAT format]
SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]
3f070c2bb470 :) show databases;
SHOW DATABASES
Query id: 2aee3be7-688e-4cdb-8663-56baf78d3804
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ default │
│ information_schema │
│ system │
└────────────────────┘
4 rows in set. Elapsed: 0.005 sec.
創(chuàng)建數(shù)據(jù)庫CREATE DATABASE
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
條件
IF NOT EXISTS
如果db_name數(shù)據(jù)庫已經(jīng)存在,則ClickHouse不會(huì)創(chuàng)建新數(shù)據(jù)庫并且:
如果指定了子句,則不會(huì)引發(fā)異常。
如果未指定子句,則拋出異常。
3f070c2bb470 :) create database test;
CREATE DATABASE test
Query id: 1e43891b-62f3-452c-9662-ca96dac074fd
Ok.
0 rows in set. Elapsed: 0.005 sec.
查詢表ENGINE
3f070c2bb470 :) show create database test;
SHOW CREATE DATABASE test
Query id: fd1214aa-f3fd-4817-b818-f73a3bd7a2ec
┌─statement───────────────────────────┐
│ CREATE DATABASE test
ENGINE = Atomic │
└─────────────────────────────────────┘
1 rows in set. Elapsed: 0.003 sec.
切換數(shù)據(jù)庫
3f070c2bb470 :) use test;
USE test
Query id: 338d285e-be47-48b9-878f-187b5094f0e4
Ok.
0 rows in set. Elapsed: 0.002 sec.
創(chuàng)建表
3f070c2bb470 :) CREATE TABLE user
(
`id` Int8,
`name` String,
`age`Int8
) ENGINE = Memory ;
CREATE TABLE user
(
`id` Int8,
`name` String,
`age` Int8
)
ENGINE = Memory
Query id: 832ec5c8-9b3a-48a4-ba70-91b5f21ad68a
Ok.
0 rows in set. Elapsed: 0.013 sec.
查看表結(jié)構(gòu)
3f070c2bb470 :) desc user;
DESCRIBE TABLE user
Query id: aacff6e6-e06f-4753-b299-a1f2212d763e
┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id │ Int8 │ │ │ │ │ │
│ name │ String │ │ │ │ │ │
│ age │ Int8 │ │ │ │ │ │
└──────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
3 rows in set. Elapsed: 0.004 sec.
表CRUD操作
3f070c2bb470 :) insert into user(`id`,`name`,`age`) values(1,'yyp',18);
INSERT INTO user (id, name, age) FORMAT Values
Query id: 97bf74fd-b79a-4ad3-a4de-afa6f0c8a3bf
Ok.
1 rows in set. Elapsed: 0.018 sec.
3f070c2bb470 :) select * from user;
SELECT *
FROM user
Query id: 5df46115-378b-4e85-a484-d87937dd4f07
┌─id─┬─name─┬─age─┐
│ 1 │ yyp │ 18 │
└────┴──────┴─────┘
1 rows in set. Elapsed: 0.003 sec.
3f070c2bb470 :) alter table user update age=20 where id =1;
ALTER TABLE user
UPDATE age = 20 WHERE id = 1
Query id: 7cb0f153-ab4b-4003-af97-f8277d09a3c5
Ok.
0 rows in set. Elapsed: 0.008 sec.
3f070c2bb470 :) alter table user delete where id =1;
ALTER TABLE user
DELETE WHERE id = 1
Query id: 66bd95b2-6953-4f44-b95d-9cf63b2caf84
Ok.
0 rows in set. Elapsed: 0.005 sec.
ClickHouse 并不是直接就一蹴而就的,Metrica 產(chǎn)品的最初架構(gòu)是基于MySQL實(shí)現(xiàn)的,所以在 ClickHouse 的設(shè)計(jì)中,能夠察覺到一些 MySQL 的影子,表引擎的設(shè)計(jì)就是其中之一。與 MySQL 類似,ClickHouse 也將存儲(chǔ)部分進(jìn)行了抽象,把存儲(chǔ)引擎作為一層獨(dú)立的接口,并且擁有合并樹、內(nèi)存、文件、接口等 20 多種引擎。其中每一種引擎都有著各自的特點(diǎn),用戶可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景的需求,選擇合適的引擎。
下面是幾種常用的表引擎:
TinyLog
最簡(jiǎn)單的表引擎,用于將數(shù)據(jù)存儲(chǔ)在磁盤上。每列都存儲(chǔ)在單獨(dú)的壓縮文件中。寫入時(shí),數(shù)據(jù)將附加到文件末尾。
并發(fā)數(shù)據(jù)訪問不受任何限制:
如果同時(shí)從表中讀取并在不同的查詢中寫入,則讀取操作將拋出異常
如果同時(shí)寫入多個(gè)查詢中的表,則數(shù)據(jù)將被破壞。
這種表引擎的典型用法是 write-once:首先只寫入一次數(shù)據(jù),然后根據(jù)需要多次讀取。查詢?cè)趩蝹€(gè)流中執(zhí)行。換句話說,此引擎適用于相對(duì)較小的表(建議最多1,000,000行)。如果您有許多小表,則使用此表引擎是適合的,因?yàn)樗萀og引擎更簡(jiǎn)單(需要打開的文件更少)。當(dāng)您擁有大量小表時(shí),可能會(huì)導(dǎo)致性能低下,但在可能已經(jīng)在其它 DBMS 時(shí)使用過,則您可能會(huì)發(fā)現(xiàn)切換使用 TinyLog 類型的表更容易。不支持索引。
在 Yandex.Metrica 中,TinyLog 表用于小批量處理的中間數(shù)據(jù)。
以列文件的形式保存在磁盤上,不支持索引,沒有并發(fā)控制。一般保存少量數(shù)據(jù)的小表,生產(chǎn)環(huán)境上作用有限。可以用于平時(shí)練習(xí)測(cè)試使用。
Memory 引擎以未壓縮的形式將數(shù)據(jù)存儲(chǔ)在 RAM 中。數(shù)據(jù)完全以讀取時(shí)獲得的形式存儲(chǔ)。換句話說,從這張表中讀取是很輕松的。并發(fā)數(shù)據(jù)訪問是同步的。鎖范圍小:讀寫操作不會(huì)相互阻塞。不支持索引。查詢是并行化的。在簡(jiǎn)單查詢上達(dá)到最大速率(超過10 GB /秒),因?yàn)闆]有磁盤讀取,不需要解壓縮或反序列化數(shù)據(jù)。(值得注意的是,在許多情況下,與 MergeTree 引擎的性能幾乎一樣高)。重新啟動(dòng)服務(wù)器時(shí),表中的數(shù)據(jù)消失,表將變?yōu)榭铡Mǔ#褂么吮硪媸遣缓侠淼摹5牵捎糜跍y(cè)試,以及在相對(duì)較少的行(最多約100,000,000)上需要最高性能的查詢。
內(nèi)存引擎,數(shù)據(jù)以未壓縮的原始形式直接保存在內(nèi)存當(dāng)中,服務(wù)器重啟數(shù)據(jù)就會(huì)消失。讀寫操作不會(huì)相互阻塞,不支持索引。簡(jiǎn)單查詢下有非常非常高的性能表現(xiàn)。一般用到它的地方不多,除了用來測(cè)試,就是在需要非常高的性能,同時(shí)數(shù)據(jù)量又不太大的場(chǎng)景
Clickhouse 中最強(qiáng)大的表引擎當(dāng)屬 MergeTree (合并樹)引擎及該系列(*MergeTree)中的其他引擎。
MergeTree 系列的引擎被設(shè)計(jì)用于插入極大量的數(shù)據(jù)到一張表當(dāng)中。數(shù)據(jù)可以以數(shù)據(jù)片段的形式一個(gè)接著一個(gè)的快速寫入,數(shù)據(jù)片段在后臺(tái)按照一定的規(guī)則進(jìn)行合并。相比在插入時(shí)不斷修改(重寫)已存儲(chǔ)的數(shù)據(jù),這種策略會(huì)高效很多。
主要特點(diǎn):
存儲(chǔ)的數(shù)據(jù)按主鍵排序。
這使得您能夠創(chuàng)建一個(gè)小型的稀疏索引來加快數(shù)據(jù)檢索。
如果指定了 分區(qū)鍵 的話,可以使用分區(qū)。
在相同數(shù)據(jù)集和相同結(jié)果集的情況下 ClickHouse 中某些帶分區(qū)的操作會(huì)比普通操作更快。查詢中指定了分區(qū)鍵時(shí) ClickHouse 會(huì)自動(dòng)截取分區(qū)數(shù)據(jù)。這也有效增加了查詢性能。
支持?jǐn)?shù)據(jù)副本。
ReplicatedMergeTree 系列的表提供了數(shù)據(jù)副本功能。更多信息,請(qǐng)參閱 數(shù)據(jù)副本 一節(jié)。
支持?jǐn)?shù)據(jù)采樣。
需要的話,您可以給表設(shè)置一個(gè)采樣方法。
ClickHouse中最強(qiáng)大的表引擎當(dāng)屬M(fèi)ergeTree引擎及該系列中的其他引擎,支持索引和分區(qū),地位可以相當(dāng)于innodb之于Mysql。而且基于MergeTree,還衍生除了很多小弟,也是非常有特色的引擎。