ClickHouse最常用复制表、分布式表使用教程【高可用的基础】
ClickHouse分布式存储要保证高可用,就必须有数据冗余——即副本(replica)。ClickHouse依靠ReplicatedMergeTree引擎族与ZooKeeper实现了复制表机制,成为其高可用的基础。另外ClickHouse像ElasticSearch一样具有数据分片(shard)的概念,这也是分布式存储的特点之一,即通过并行读写提高效率。ClickHouse依靠Distributed引擎实现了分布式表机制,在所有分片(本地表)上建立视图进行分布式查询,效率极高!
这里总结一下Clickhouse中最常用的ReplicatedMergeTree引擎和Distributed引擎,利用这两个引擎可以轻松应付绝大部分的大规模数据和复杂业务。
创建数据库
1 |
create database cppla on CLUSTER 'company_cluster'; |
创建本地表
1 2 3 4 5 |
create table cppla.id_phone_local_table on CLUSTER 'company_cluster'( id UInt64, phone UInt64 )engine=ReplicatedMergeTree('/clickhouse/tables/{shard}/id_phone_local_table_20210409_1507', '{replica}') order by(id); |
创建分布式表
1 2 3 4 |
create table cppla.id_phone_distribute_table on CLUSTER 'company_cluster'( id UInt64, phone UInt64 )engine = Distributed(company_cluster,cppla,id_phone_local_table, rand()); |
插入测试数据
1 2 3 4 5 6 7 |
# 分片机一 insert into cppla.id_phone_local_table values(1,111),(2,222); insert into cppla.id_phone_local_table values(3,333),(4,444); #分片机二 insert into cppla.id_phone_local_table values(5,555),(6,666); insert into cppla.id_phone_local_table values(7,777),(8,888); |
注意:
生产过程中这里推荐通过随机哈希算法均匀散列到不同的分片机本地表,而不是写分布式表,直接写分布式表会导致集群负载较高且无法应对较大规模的数据量。
查询分布式表
1 |
select * from id_phone_distribute_table order by id; |
删除复制表和分布式表命令
1 2 |
drop table id_phone_local_table on CLUSTER 'company_cluster'; drop table id_phone_distribute_table on CLUSTER 'company_cluster'; |
注意:
这里不要使用drop table id_phone_local_table ;这样会导致只会在运行该命令的某一分片机 / 副本机上删除,无法同步删除到其他机器。
ClickHouse最常用复制表、分布式表使用教程【高可用的基础】,by:cpp.la