分布式数据库中分布键规则

文章介绍了分布式数据库如Postgres-XC的优点,包括数据分散与负载均衡、查询性能优化、数据局部性提升以及与非分布式数据库的对比。特别详细讲解了Postgres-XC的哈希分布规则、特点(如全局事务和无中心节点)、建表语法和使用限制。
摘要由CSDN通过智能技术生成

简介

作为分布式数据库阐述一下几点优势:

数据分散和负载均衡:通过选择合适的分布键,可以将数据均匀地分布在多个节点上,避免数据集中存储在单一节点上的问题。这样可以实现数据的负载均衡,提高整体系统的性能和可扩展性。

查询性能优化:合理选择分布键可以使相同键值的数据存储在同一节点上,这样在进行查询操作时可以减少数据的传输和网络开销,提高查询效率。同时,正确选择分布键也能避免数据倾斜的问题,均衡地分布查询负载。

数据局部性优化:通过选择与查询相关的分布键,可以使查询所需的数据更有可能在同一节点上,减少跨节点的数据传输,加快查询的速度。

对于非分布式数据库,也就是传统的单节点数据库,其优势包括:

简单易用:非分布式数据库通常只需要在单个节点上进行部署和配置,减少了分布式系统的复杂性。操作和管理相对简单,上手较快。

一致性和事务支持:非分布式数据库提供强一致性和完整的事务支持,保证数据的准确性和可靠性。在某些场景下,这种一致性和事务支持是非常重要的,特别是需要严格的数据一致性和事务控制的业务。

较低的延迟:由于非分布式数据库只在单节点上运行,通常具有较低的读/写延迟,特别是对于单个查询和事务操作。

分布式数据库的代表:Greenplum,HBase,HUAWEI GaussDB,MongoDB,OceanBase,Postgres-XC,Redis

本文以Postgres-XC数据库的分布规则举例

Postgres-XC特点

在Postgres-XC数据库中, 系统进行自有的哈希算法对所给的分布键计算其结果,根据结果将所对应的数据分不到各个节点中,

Postgres-XC有如下特点。
1,基于PostgreSQL实现的集群。
·可以使用PostgreSQL的客户端及驱动无差别地连接到Postgres-XC上。客户端与PostgreSQL是完全兼容的。紧跟着PostgreSQL的升级而升级。
2,并不是架构在PostgreSQL数据库之上的中间件。是通过修改PostgtreSQL源代码实现的数据库集群,并不是一些架构在数据库之上的中间件。实现了全局事务,是数据强一致性的。
3,对称集群。
·无中心节点,SQL可以发送给任意一台协调器,可扩展性比较好。·应用可以读写任意节点,结果都是一样的。在整个集群上实现了ACID,所以读任意节点看到的结果都是一致的。
4,线性扩展读和写。
与读写分离的方案不同的是,通过增加节点,不仅可以扩展读还能扩展写的性能。

以下图展示了Postgres-XC性能随数据节点数增长的情况

图中的“Ideal”线代表理想情况下的性能,n个数据节点的性能是单机性能的n倍,“Observed”线是实测的结果。从实例结果中可以看出,当有3个Postgres-XC数据节点时,可达到单个PostgreSQL数据库2倍的性能,5个节点可以达到单个PostgreSQL数据库3倍的性能,10个Postgres-XC数据节点时,基本可以到达单个PostgreSQL数据库6倍的性能。从图中可以看出,随数据节点的增加,Postgres-XC的可扩展能力的增长还是比较线性的

 语法

根据数据的分布方式,Postgres-XC可以创建以下两种类型的表。

Replicated tables:
各个底层节点数据库上的表中的数据完全相同。插入数据时,分别在各个底层节点数据库上插入相同的数据。读数据时,只需要读任意一个节点上的数据。

Distributed tables:
根据一个拆分规则把表的数据拆分到各个底层的数据库数据节点上,也就是分布式数据库中常说的Sharding技术。每个底层数据库节点上只保存表的一部分数据。Postgres-XC可以让不同的表的数据分布到不同的部分底层数据库节点上,而不必全部完整地分布到所有的底层数据库节点上。下面通过分析Postgres-XC的建表语句来看它是如何实现上述功能的。建表,需要指定表的数据分布到哪些节点上,Postgres-XC在建表语句中增加了DISTRIBUTE BY子句,此子句的语法如下

[ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( column_name ) } } ]
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]

--唯一分布键
create  table hash_text(id bigint ,text varchar(50) ,col  varcahr(50))
 distributed by hash(id)

--联合分布键
create  table hash_text(id bigint ,text varchar(50) ,col  varcahr(50))
 distributed by hash(id,text)

 注意:如果不指定DISTRIBUTE BY子句,分布键会自动使用主键,实际上,如果没有主键而有唯一键,Postgres-XC会自动使用唯一键,当也不存在唯一约束时,则会将找到的第一个可以作为分布键的列用作分布键。

Postgres-XC还有以下使用限制:

分布键是不能更新的。
不支持SERIALIZABLE和REPEATABLE READ两种事务隔离级别。
约束只能应用于Datanodes,不支持跨节点的约束。
在PREPARE语句中不支持一些复杂的SQL。
视图上的权限可能工作不正常。
行触发器在COPY命令中并不工作。
REPLICATION的表不支持COPY TO。
plpgsql函数中不能使用DML语句。
不支持CREATE TABLE AS EXECUTE。
不支持WHERE CURRENT OF。
不支持Foreign Data Wrapper。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值