根据SourceForge Postgres-XC 的页面,在 Postgres-XC 中创建分布式表时,它可以使用属性 DISTRIBUTE BY :
- DISTRIBUTE BY REPLICATION:表的每一行都将被复制到 Postgres-XC 数据库集群的所有数据节点中。
- DISTRIBUTE BY HASH:表的每一行将根据指定列的哈希值放置。允许以下类型作为分布列:INT8、INT2、OID、INT4、BOOL、INT2VECTOR、OIDVECTOR、CHAR、NAME、TEXT、BPCHAR、BYTEA、VARCHAR、FLOAT4、FLOAT8、NUMERIC、CASH、ABSTIME、RELTIME、DATE、TIME、 TIMESTAMP、TIMESTAMPTZ、INTERVAL 和 TIMETZ。
这到底是什么意思?
最佳答案
在这里回答我自己的问题,作为 documentation说并且@a_horse_with_no_name 指出,Distribute by Replication 会将所有记录分发到所有节点,并且Distribute by Hash将根据其散列的列分隔记录。例如:
CREATE TABLE EMPLOYEE (EMPID INT, NAME TEXT) DISTRIBUTE BY HASH (EMPID) TO datanode1, datanode2;
记录分布在两个节点之间。
此外,通过复制分发是为了读取缩放 -> 使用协调器进行 DML,并从各个节点获取记录。
Distributed by Hash 是为了write scaling -> 使用节点做 DML,从 Coordinator 获取记录。引用this获取更多信息。
关于postgresql - Postgres XC 中的 DISTRIBUTE BY REPLICATE 和 HASH 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266057/