python处理teradata数据库_Teradata数据库——你需要了解的基础知识

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的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值