postgresql - Postgres XC 中的 DISTRIBUTE BY REPLICATE 和 HASH 有什么区别?

标签 postgresql hash cluster-computing replication distributed-system

根据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/

相关文章:

历史表中的 SQL LEFT JOIN

postgresql - Flyway - 通过引用 AWS ssm 参数和 secret 管理中的用户名和密码,使用 Flyway 在 postgres 数据库中创建带有密码的用户

ruby - 几个散列到网格中

cluster-computing - qsub 集群上的作业后检查实时输出

javascript - 传单 map 中带有 Leaflet.markercluster 的弹出窗口

c++ - 返回成对 vector 或文本数组的 PostgreSQL C 扩展函数

postgresql - 如何使用 CSV 文件中的标题从 CSV 文件复制到 PostgreSQL 表?

ruby - 散列的'floor'值?

ruby - 从 Hash_Secret 格式检索文本格式的密码,即从 Rails 中的盐

linux - Linux 集群上共享图像文件夹的最佳实践?