Teradata 数据库技术概略之二 —— 数据分布机制(1) 概述

时间:2021-09-05 22:50:06

Teradata 数据库技术概略之二 —— 数据分布机制(1 概述

 

对于基于Shared Nothing架构的并行数据库来说,数据分布(Data Distributing)(或者被称为数据安置 Data Placement)是不可避免的;同时,整个系统的数据在多个处理单元上的分布状况也决定了系统的整体性能——如果大量的数据被分布在某一个(或少数几个)处理单元上,那么,这一个(或者少数几个)处理单元的工作负载会很大,进而成为系统整体性能的瓶颈。因此,对于基于Shared Nothing架构的并行数据库,如何在整个系统上进行数据分布是数据库整体设计时需要重点考虑的一个问题。Teradata作为业界最高效的并行数据库,其数据分布机制是其全部并行机制的底层核心,只要理解了Teradata的数据分布机制,就可以掌握Teradata的全部并行功能的实现机制。

 

Teradata的数据分布是整个系统范围内的数据分布,是跨AMP的数据分布,是针对每一个实体表的数据分布。在前面的讨论中我们知道,AMPTeradata数据库系统中具体数据的持有者和直接操作者,整个Teradata数据库系统中的每一条数据都唯一关联到某一个AMP上。同时,对于系统中的每个表,其数据都会均匀(并非绝对均匀)地分布在系统中的全部AMP上,也就是说,在整个系统范围内容的所有AMP上,都有系统中的所有的实体表,只是同一个表在不同的AMP上实际存储的数据并不相同。那么,Teradata是如何做到这一点的呢?答案就是本篇文章要讨论的Teradata的基于哈希算法的数据分布机制。

 

在进行Teradata数据库的逻辑设计时,对于每一个表,都要指定一个“主索引”(Primary Index,简称PI,关于Teradata的索引,我将在后续的文章中进行详细说明),Teradata数据库引擎会根据这个主索引的实际值,同时根据系统的配置情况(主要是AMP的个数),通过一种哈希算法,为每个表的每一条数据都生成一个“行哈希值”(Row Hash Value),Teradata会根据这个行哈希值把数据分布到某一个确定的AMP上。


Teradata 数据库技术概略之二 —— 数据分布机制(1) 概述


在上图所示的数据分布的过程中,在值2030所在列上定义了Primary Index,系统的哈希算法根据2030这两个值,生成了两个不同的行哈希值,之后系统根据这两个行哈希值的内容,把2030各自所对应的行分别分布到了不同的AMP上进行存储了。


在获取数据的时候(SELECTUPDATEDELETE都是获取数据的SQL操作),系统会使用与进行数据分布时相同的哈希算法对2030进行哈希运算,这会得到相同的行哈希值,系统就根据这个行哈希值直接定位到20或者30各自所在的AMP,并由各自对应的AMP返回要获取的行。

 

根据哈希算法,对于不同的Primary Index值,可能会计算出相同的行哈希值,这些具有相同的行哈希值的数据行就会被分布在同一个AMP上。这样,如果哈希算法选择得当,则可以基本保证,同一个表中的数据在整个Teradata并行系统的多个AMP上的分布是趋于均匀的。

 

对于一个Teradata系统,其哈希算法是确定的,而且是运行时不可变的,在系统的硬件不变的前提下(AMP数不变),这就保证了对于同一个Primary Index值,所生成的行哈希值也是相同的。因此,对于不同的表,尤其是有主-外键关联关系的表,通过慎重地定义Primary Index,可以做到那些经常要进行关联(往往是主-外键关联)的行会被分布到同一个AMP上,这大大缩短了数据库进行数据关联的时间,提高了Teradata系统的性能。

 

我们将在下一节详细描述Teradata进行数据分布的哈希算法。