Postgresql Postgres XC中按复制分发和散列的区别是什么?

Postgresql Postgres XC中按复制分发和散列的区别是什么?,postgresql,hash,cluster-computing,replication,distributed-system,Postgresql,Hash,Cluster Computing,Replication,Distributed System,根据Postgres XC的页面,在Postgres XC中创建分布式表时,可以使用属性DISTRIBUTE BY with: 按复制分发:表的每一行都将被复制到Postgres XC数据库集群的所有Datanode中 按散列分发:将根据指定列的散列值放置表的每一行。允许以下类型作为分发列:INT8、INT2、OID、INT4、BOOL、INT2VECTOR、OIDVECTOR、CHAR、NAME、TEXT、BPCHAR、BYTEA、VARCHAR、FLOAT4、FLOAT8、NUMERIC、

根据Postgres XC的页面,在Postgres XC中创建分布式表时,可以使用属性DISTRIBUTE BY with:

  • 按复制分发:表的每一行都将被复制到Postgres XC数据库集群的所有Datanode中
  • 按散列分发:将根据指定列的散列值放置表的每一行。允许以下类型作为分发列:INT8、INT2、OID、INT4、BOOL、INT2VECTOR、OIDVECTOR、CHAR、NAME、TEXT、BPCHAR、BYTEA、VARCHAR、FLOAT4、FLOAT8、NUMERIC、CASH、ABSTIME、RELTIME、DATE、TIME、TIMESTAMP、TIMESTAMP、INTERVAL和TIMETZ

这到底意味着什么?

在这里回答我自己的问题,正如上面提到的和没有名字的@a_horse_所指出的,通过复制分发将所有记录分发到所有节点,通过散列分发将根据散列来隔离记录。例如:

CREATE TABLE EMPLOYEE (EMPID INT, NAME TEXT) DISTRIBUTE BY HASH (EMPID) TO datanode1, datanode2;
记录分布在两个节点之间

此外,“按复制分发”用于读取缩放->使用协调器执行DML,并从各个节点获取记录


Distributed by Hash用于写缩放->使用节点执行DML,并从协调器获取记录。有关更多信息,请参阅。

我认为描述非常清楚:在第一种情况下,表的所有行都将在所有节点中可用。在第二种情况下,一行仅存储在一个节点上(基于散列)