
# 选择分布方式
复制表（Replication）方式将表中的全量数据在集群的每一个DN实例上保留一份。主要适用于记录集较小的表。这种存储方式的优点是每个DN上都有该表的全量数据，在join操作中可以避免数据重分布操作，从而减小网络开销，同时减少了plan segment(每个plan segment都会起对应的线程)。缺点是每个DN都保留了表的完整数据，造成数据的冗余。一般情况下只有数据量较小的维度表才会定义为Replication表。
哈希（Hash）表将表中某一个或几个字段进行hash运算后，生成对应的hash值，根据DN实例与哈希值的映射关系获得该元组的目标存储位置。对于Hash分布表，在读/写数据时可以利用各个节点的I/O资源，大大提升表的读/写速度。一般情况下大表定义为Hash表。
范围（Range）和列表（List）分布是由用户自定义的分布策略，根据分布列的取值落入满足一定范围或者具体值的对应目标DN，这两种分布方式便于用户灵活地进行数据管理，但对用户本身的数据抽象能力有一定的要求。如[表1]所示。
 表1策略及适用场景 
| **策略**      | **描述**                     | **适用场景**        |
|:---|:---|:---|
| Hash        | 表数据通过hash方式散列到集群中的所有DN实例上。 | 数据量较大的事实表。      |
| Replication | 集群中每一个DN实例上都有一份全量表数据。      | 小表、维度表。         |
| Range       | 表数据对指定列按照范围进行映射，分布到对应DN。   | 用户需要自定义分布规则的场景。 |
| List        | 表数据对指定列按照具体值进行映射，分布到对应DN。  | 用户需要自定义分布规则的场景。 |
   
如[图1]所示，复制表如图中的表T1，哈希表如图中的表T2。
图1复制表和哈希表   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558056775.png "点击放大")
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 在对复制表进行数据插入、修改、删除等操作时，如果用户使用声明为可下推（shippable或者immutable）的函数对不可下推的成分进行封装，则可能会导致复制表不同DN数据不一致。
- 使用带有窗口函数、rownum、limit子句、用户自定义函数等结果不稳定的语句对复制表进行数据插入或修改，可能会导致不同节点数据不完全相同。
 
