Teradata 数据库技术概略之四 —— 数据分布机制(3) Hash Map

来源:互联网 发布:java串口通信编程 编辑:程序博客网 时间:2024/05/16 06:52

Teradata根据要存储的每条记录的PI值按照某种哈希算法生成一个行哈希值,生成的这个行哈希值的前16位或20位代表了这个行哈希值在哈希表中的哈希桶的编号,而这个哈希桶号则决定了这条记录具体会被分布到哪个AMP上,那么,Teradata是如何根据哈希桶号就知道把数据分布到对应的AMP上的呢?这就要通过本篇所要讨论的Hash Map(至于Hash Map,我一直也找不到合适的中文译法,称为“哈希地图”或者“哈希图”都有那么点意思,但我感觉都不太好,所以在后面的介绍中,我就都直接使用Hash Map了)。

 

我们可以把Hash Map理解成一种机制,它最终使得Teradata把某个数据记录分布到某个AMP上。在逻辑上,可以认为Hash Map是一个二维表,表中总共包含了65536或者1048576个单元格,每个单元格中记录了一个哈希桶号,而这个哈希桶号唯一对应了Teradata系统中的一个AMP,整个二维表中,会有多个哈希桶号对应到一个AMP上。

 

根据上面的描述可以得出这样的结论:(1)对于一个给定的Teradata系统,Hash Map的内容是确定的;(2)对于多个不同的Teradata系统,如果它们使用相同的哈希桶数(65536或者1048576),而且它们包含了相同的AMP个数,那么,它们的Hash Map是完全相同的,是可互换的。

 

由于Teradata系统要保证数据记录尽可能均匀地分布到系统中所有的AMP上,也就是说65536或者1048576个哈希桶号要尽可能平均地对应到每个AMP上,但由于AMP个数的原因,这个“平均”往往不可能真正做到。我们举例说明,假设系统使用65536个哈希桶,系统中共有200个AMP,那么我们可以计算得出:其中136个AMP上会分配到328个哈希桶,而另外的64个AMP上会分配到327个哈希桶。这就导致了在数据分布上的“倾斜”(Skew)的问题,而且这种倾斜通常是不能避免的。可以计算一下倾斜率:

(328-327)÷ 328 × 100 = 0.31%

下面的表格列出了在系统配置为65536个哈希桶时,不同AMP数的情况下的倾斜率:

AMP数目
每个AMP上的

哈希桶数 下限
每个AMP上的

哈希桶数 上限
倾斜率(%)

100
655
656
0.15

200
327
328
0.31

300
218
219
0.46

400
163
164
0.61

500
131
132
0.76

1000
65
66
1.52

2000
32
33
3.03

3000
21
22
4.55

4000
16
17
5.88

5000
13
14
7.14

可以看到,随着AMP数的增加,倾斜率也在近似线性地增加,所以在建设Teradata系统的时候,对系统的哈希桶数要进行慎重选择,Teradata的推荐做法是:当系统中的AMP数大于1000时,把系统的哈希桶数设置为1048576,以尽量减小数据分布的倾斜率。

 

在Teradata系统中,Hash Map是一直驻留在内存的,系统建立完成后,Hash Map就一直存在且一成不变,直到系统的哈希桶数被改变或者系统中的AMP数发生了变化(由于变化的代价很高,这两种情况都不常见)。Hash Map是由BYNET维护的,并且在生成后会被复制传送到系统中的每个节点(并非AMP)上。

 

为了满足不同的管理需要,每个Teradata系统都同时存在着五种不同类型的Hash Map,它们分别是 Current Configuration Primary Map、Current Configuration Fallback Map、Reconfiguration Primary Map、Reconfiguration Fallback Map、Bit Map Hash Map。关于这些Hash Map的具体作用和相互之间的不同之处,请参考Teradata的相关资料。

 

Teradata系统通过Hash Map把数据记录分布到AMP上,数据记录到达AMP后,AMP会根据该数据记录的RowID来确定该数据记录具体存储在存储介质的什么位置上。

 

数据分布机制小结:

  • Teradata是通过哈希运算对数据记录进行系统范围的均匀分布的;
  • 数据记录的PI经过哈希计算得出行哈希值,该行哈希值中包括了哈希桶号,系统根据这个哈希桶号把数据记录分布到指定的AMP上,这一过程是通过Hash Map来实现的;
  • 为了保证每个数据记录在整个系统中唯一性,TeradataAMP为每个数据记录生成一个32位长度的唯一值(UV),这个唯一值与行哈希值一起组成RowID,这个RowID在整个Teradata系统中唯一代表了这条数据记录;
  • AMP根据数据记录的RowID安排数据记录的物理存储位置;
原创粉丝点击