深入浅出话DB|RapidsDB高性能解密 壹——数据分区

2022-06-06 00:00:00 数据 集群 数据库 节点 分区

《深入浅出话DB》之高性能篇  目录

01

数据分区

02

行列混存

03

数据存储

04

并发查询

05

数据编码

06

代码生成

07

索引使用

08

自动优化

记得开始学编程的时候,专业课老师跟我们说,程序就是算法加数据结构。一个高性能的程序,除了要求一个好算法,还要讲究数据存在哪里,用什么方式保存。

作为高性能数据库的代表,RapidsDB用什么存储方法实现性能加速?

回,数据分区打头阵,Here we go!

RapidsDB是一个高度可扩展的分布式系统,在默认情况下,当集群中每创建一个存储节点,RapidsDB将在该存储节点上为每个CPU内核创建一个分区,以实现大化的并行性。或者,当我们创建数据库的时候,可以通过参数自定义该数据库将被分为多少个数量的分区。

在数据库执行的查询任务中,分区是查询并行性的粒度单位,换句话说,每个并行查询都以分区数量相同的并行度运行。当集群处在需要更快的响应时间的OLAP分析业务场景中时,我们可以部署更多的存储节点以获得更多的分区,可以在资源合理利用的前提下,达到性能大化的提升。



在确定了集群中的分区总数量后,每张分布式表在被创建的时候也会被分割为同等数量。对于这些分布式列表,其数据可以在集群中的各个节点间自动分割,也可以根据用户的定义,通过人为的选择分区键进行数据的分割。这里提到的分区键也可以称为“分区索引”,它类似于普通表的表索引,其中可以包含任意数量的列。当用户运行create table语句来创建表时,可以为该表指定一个分区键。如果不进行具体的分区键,会遵循以下两种情况:

1)如果该表拥有主键,则分区键就为该表的主键,数据将以主键所在列为依据,进行分布;

2)如果该表既没有指定分区键也没有主键,那么数据库引擎通过自身算法将为该表执行无键分区。这意味着数据库引擎将会以保障数据平衡分布的前提情况下,把表的数据随机分发到各个分区中。

分布式表的分区键决定了表中给定的行将会被存储到哪个分区中。数据库在运行插入语句时,计算节点会计算组成分区键的某列或多个列中的哈希值,进行取模运算以获得存储该行的分区编号,然后计算节点将会把插入操作定向到每个存储节点中相对应的分区。

对于极小的表,不需要进行分布操作,并且它将存在于集群中的每个节点上。复制表通过从主聚合器到集群中每个节点的主从复制来实现。这类表称为“复制表”。



当发现集群内现规模的计算节点和存储节点在大负载下,使得服务器无法达到近满负荷的运行状态,用户可以根据自身需要向集群中额外添加计算节点和存储节点,达到增加分区的目的。通过重新平衡分区后,即可继续提供更高性能的服务。

而当用户遇到业务增长过快带来的资源瓶颈或性能瓶颈时,用户还可以通过增加服务器的方式,进行动态扩容。也可以通过增加集群中数据分区的方式,在不增加服务器负载的同时,又能达到线性提升性能的目的。

普通行式表和列式表在建表时就会通过分区键进行分区,例如表A和表B。对于极小的表,我们可以建立复制表,在每个节点均有该表的备份。

      

来源 https://www.modb.pro/db/392582

相关文章