Teradata数据库——你需要了解的基础知识

AMP (Access Module Processors)

TD里面最基础的核心组件之一,它是存储、计算TD表中每一行数据的基本单位。你会在很多地方看到它的身影。每一个AMP有自己的一块内存、有自己的一块计算资源和自己的一块磁盘空间。


Teradata数据库——你需要了解的基础知识_第1张图片
AMP

一条SQL在TD中的执行过程

Teradata数据库——你需要了解的基础知识_第2张图片
TD简单架构

用户输入一条SQL,传递到PE,PE给出一个执行计划(使用explain可以看到),将计划执行的任务通过BYNET传递到各个AMP中同步执行,AMP执行然后返回到PE中,PE汇总返回给用户。

TD索引

Single-AMP Retrieved是指TD可以快速的将数据定位在一个AMP中去获取,是一种非常快的执行计划。一瞬间就定位到数据所在的成千上万的AMP中的一个,然后马上取出返回。这速度你说快不快。

Unique Primary Index

唯一主键索引,和大部分的其他数据库的索引一样。当你设置了唯一主键索引的好处就是,你能够非常快速的定位你的数据,无论数据库中有多大的数据量。你在where条件中指定了唯一主键索引,然后TD就会把这些数据根据索引的字段均匀的Hash到所有的AMP上去。当你执行一条SQL时会达到,一秒、一行、一个AMP的效果。

  • 字段值不能重复
  • 数据均匀分配到各个AMP
  • single AMP Retrieve
None-Unique Primary Index

非唯一主键索引,它和唯一主键索引不同的点在于能够插入重复值。TD会根据字段值然后利用内部的一个数学公式Hash到各个AMP上去。你会发现不同的AMP上的数据量并不均匀分布。相同字段值的行会存在同一个AMP中,并且紧密的存放在一起。

  • 字段值可以重复
  • 数据分布不均,相同索引字段值的数据会分布在一个AMP中
  • single AMP Retrieve
Muti-Column Primary Index

多字段组合索引,假设设置了一个联合索引(A,B) 那么TD需要这两个条件同时存在的情况下索引才能生效,不存在部分索引生效的情况。TD会根据两个索引的组合一起Hash到特定的AMP中去取数据。

  • 也有Unique和None Unique两种类型索引
  • 必须全部字段都在where条件中使用时才能生效
  • single AMP Retrieve
No Primary Index

没有索引的表,但你进行数据查询时就会发生全表扫描的情况。这是不可避免的。那一般这样的表的设计是为了数据的暂存称为staging区域,然后你按照你的业务需求再插入到自己设计的真正的表里面去。

  • 全表扫描
  • 有特殊的设计作用,用于数据暂存
  • 在建表的时候需要显示的指定no Primary index 否则会自动创建默认的Primary index
  • 数据随机分布,但是TD会将数据很好的均匀的分布到各个AMP中去

share nothing environment

Teradata的硬件是一个大小为一个PC电脑那么大的主机,里面大概有40个AMP和4个PE,然后主机连接到磁盘区域。每一个AMP对应有一个自己的磁盘。对应的一块内存空间。并且它们之间互相不共享环境。

Teradata数据库——你需要了解的基础知识_第3张图片
Share Nothing Environment

Teradata的物理节点架构

我们来梳理一下TD的组成层次结构,从最小的AMP开始。

一块内存空间+一些数据空间=一个AMP

一定数量的AMP+一套Linux操作系统+PDE(parallel database extension)+Gateway+Channel Driver=一个Node

Teradata数据库——你需要了解的基础知识_第4张图片
SMP Node

一定数量的Node+一定数量的物理BYNET=一个cabinet

Teradata数据库——你需要了解的基础知识_第5张图片
Node与Node之间的连接
唯一主索引的执行过程

当在where条件里面指定了被设置为Primary index的字段,那么当发生查询语句时。就会根据TD里面的数学公式Hash字段值到一个输出值上,根据输出值在HashMap中找到记录所在AMP,然后进行指定AMP查找对应的行数据。


Teradata数据库——你需要了解的基础知识_第6张图片
Hashing Process
非唯一主索引的执行过程

跟上面的执行过程很类似,唯一不同点在于,rowID由两部分组成,一部分是RowHash的值,也就是和上面一样通过字段值被数学公式Hash得到的一个输出值。还有一部分就是一个非唯一值。假设有两个同样字段的不同行数据进来,那么会被定位到同一个AMP中。Hash值为3,那么第一个行数据的真实RowID为3,1 第二个为3,2。并且相同的RowHash的数据会被分组放在一起。


Teradata数据库——你需要了解的基础知识_第7张图片
RowID

那实际上唯一主索引就是非唯一主索引的特殊情况,就是它的uniqueness Value一直是1.然后当进入一个AMP中去查找对应的RowHash值的位置的时候,它会采用非常高效率的简单算法,二分搜索。算法复杂度为log(N)快速定位到相应的RowHash的值。

你可能感兴趣的:(Teradata数据库——你需要了解的基础知识)