更新时间:2024-12-11 GMT+08:00

ClickHouse分布式表设计

建议

分布式表建表参考:

CREATE TABLE default.my_table_dis ON CLUSTER default_cluster
AS mybase.my_table_local
ENGINE = Distributed(default_cluster, default, my_table_local, rand());

使用说明

  • 分布式表名称:default.my_table_dis。
  • 本地表名称:default.my_table_local。
  • 通过“AS”关联分布式表和本地表,保证分布式表的字段定义跟本地表一致。
  • 分布式表引擎的参数说明:
    • default_cluster:集群名称。
    • default:本地表所在库名。
    • my_table_local:本地表名。
    • rand():可选参数,分片键(sharding key),可以是表中一列的原始数据(如did),也可以是函数调用的结果。
      如轮训方式:rand(),表示在写入数据时直接将数据插入到分布式表,分布式表引擎会按轮训算法将数据发送到各个分片。

      该键是写分布式表保证数据均匀分布在各分片的唯一方式。

规则

不建议写分布式表。

由于分布式表写数据是异步方式,客户端SQL由Balancer路由到一个节点之后,一批写入数据会先落入写入的节点,随后根据分布式表schema定义数据分布规则,将数据异步发送到各个shard的各个副本。整个过程数据异步发送,且数据会在一个节点临时存储,会导致网络、磁盘都会成为瓶颈,且写入成功后不一定能查询到最新一致性数据等问题。