概述
AMP (Access Module Processors)
TD里面最基础的核心组件之一,它是存储、计算TD表中每一行数据的基本单位。你会在很多地方看到它的身影。每一个AMP有自己的一块内存、有自己的一块计算资源和自己的一块磁盘空间。
AMP
一条SQL在TD中的执行过程
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对应有一个自己的磁盘。对应的一块内存空间。并且它们之间互相不共享环境。
Share Nothing Environment
Teradata的物理节点架构
我们来梳理一下TD的组成层次结构,从最小的AMP开始。
一块内存空间+一些数据空间=一个AMP
一定数量的AMP+一套Linux操作系统+PDE(parallel database extension)+Gateway+Channel Driver=一个Node
SMP Node
一定数量的Node+一定数量的物理BYNET=一个cabinet
Node与Node之间的连接
唯一主索引的执行过程
当在where条件里面指定了被设置为Primary index的字段,那么当发生查询语句时。就会根据TD里面的数学公式Hash字段值到一个输出值上,根据输出值在HashMap中找到记录所在AMP,然后进行指定AMP查找对应的行数据。
Hashing Process
非唯一主索引的执行过程
跟上面的执行过程很类似,唯一不同点在于,rowID由两部分组成,一部分是RowHash的值,也就是和上面一样通过字段值被数学公式Hash得到的一个输出值。还有一部分就是一个非唯一值。假设有两个同样字段的不同行数据进来,那么会被定位到同一个AMP中。Hash值为3,那么第一个行数据的真实RowID为3,1 第二个为3,2。并且相同的RowHash的数据会被分组放在一起。
RowID
那实际上唯一主索引就是非唯一主索引的特殊情况,就是它的uniqueness Value一直是1.然后当进入一个AMP中去查找对应的RowHash值的位置的时候,它会采用非常高效率的简单算法,二分搜索。算法复杂度为log(N)快速定位到相应的RowHash的值。
最后
以上就是稳重金针菇为你收集整理的python处理teradata数据库_Teradata数据库——你需要了解的基础知识的全部内容,希望文章能够帮你解决python处理teradata数据库_Teradata数据库——你需要了解的基础知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复