
# 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_cluster。
  
  - default：本地表所在库名。
  
  - my_table_local：本地表名。
  
  - rand()：可选参数，分片键（sharding key），可以是表中一列的原始数据（如did），也可以是函数调用的结果。
    如轮询方式：rand()，表示在写入数据时直接将数据插入到分布式表，分布式表引擎会按轮询算法将数据发送到各个分片。
    ![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
    该键是写分布式表时保证数据均匀分布在各分片的唯一方式。
    
   
 
#### 规则
不建议写分布式表。
由于分布式表写数据是异步方式，客户端SQL由Balancer路由到一个节点之后，一批写入数据会先落入写入的节点，随后根据分布式表schema定义数据分布规则，将数据异步发送到各个shard的各个副本。整个过程数据异步发送，且数据会在一个节点临时存储，会导致网络、磁盘都会成为瓶颈，且写入成功后不一定能查询到最新一致性数据等问题。
