1. teradata是业界知名MPP架构的数据库。简单理解MPP即这样的系统由多个物理上独立的节点通过高速网络互联组成的一个相互协同工作的大规模系统。从用户角度来看,用户的任务将会被透明的分割到多个节点。
teradata架构:
teradata架构由三个组件构成,从上图可以看出分别为PE、BYNET和AMP。上图只有一个PE但实际情况是由多个PE组成的。
那么各个组件都负责什么工作呢?
PE:一个PE也被称为一个vproc( virtual processor),该组件主要完成四项工作
会话控制(Session Control)
SQL解析(Parser)
SQL优化(Optimizer )
任务分发(Dispatcher)
Session Control接受客户端的连接请求,验证用户名和密码
Parser接受客户端的SQL请求,校验SQL的语法,通过查询数据字典确保客户端的操作的对象是存在的并且有权限操作对象
Optimizer 是基于成本的优化器,该组件优化SQL生成最优的执行计划
Dispatcher接受Optimizer组件的执行计划通过BYNET分布到不同的AMP
AMP处理完由PE通过BYNET接受返回结果并最终呈现给客户端
一个PE最大可以处理120个session,PE之间相互通信,自动均衡session
AMP: 也可视为一个vproc,它管理着我们的数据,下图中一个AMP连接着一个DISK,实际中一个AMP可以管理多个DISK,AMP是架在DISK上的桥梁
每个AMP管理着各自的数据,数据的存和取都是AMP的工作。当新建一张表时每个AMP上都会创建表的结构信息,例如表名、列名、索引信息等。
理想状态下我们总希望我们的表平均的分布在所有的AMP上,以更好的利用所有节点并行处理。就像这样
这样当我请求Tabel1的数据4个AMP协同工作,加快处理。假设Table1只分布在了一个AMP,此时请求Table1讲会慢很多
关于teradata的数据分布机制会单独写一篇来讲。
BYNET:也被成为MPL(message-passing layer),是AMP和PE之间的桥梁,通过BYNET网络互联将所有的AMP连在一起。PE和AMP之间所有的消息传递都是通过BYNET完成的
一个典型的teradata数据库一般由两个BYNET
BYNET的特点:
High performance:一般典型的teradata有两个BYNET同时工作
Fault tolerant:每个BYNET都都有多条连接路径,当其中一个不用时,会自动切换到另外一个BYNET上,并重新配置网络,避免将客户端请求发送到不可用的BYNET上
Load balanced: BYNET自动均衡,避免某一个负载太多
实际中我们BYNET是这样的:
DISK最终数据都是存在磁盘中的,teradata都是以磁盘阵列的形式存在的。raid的级别是可配置的
总结:teradata真正的share nothing架构,每个节点拥有自己的资源,如磁盘、内存、cpu等。每个AMP管理着自已的数据,协同工作,通过BYNET告诉网络互联
————————————————
版权声明:本文为CSDN博主「_假象」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wali_wang/article/details/50491831
teradata Primary Index简称PI
teradata 建表时强烈建议明确指定PI列(尽管不指定PI teradata会根据DBScontrol配置自动选定PI),可以是一列或者多列,最多64列
PI主要有三个作用:
数据分布(Data Distribution)
快速检索数据(Fastest way to retrieve Data)
表关联(Incredibly important for Joins)
PI可以分为两类:(UPI or NUPI)
UPI(Unique Primary Index):不可以包含相同的值,对于装载数据总是将table的数据均匀的分布到AMP上,对于检索数据总是one-AMP operation类型。
语法:
CREATE TABLE sample_1
(col_a INT
,col_b INT
,col_c INT)
UNIQUE PRIMARY INDEX (col_b);
1
2
3
4
5
UPI分布:
NUPI(Non-Unique Primary Index ):可以存在相同的值,对于装载数据相同的值会被分布到同一个AMP上
语法:
CREATE TABLE sample_2
(col_x INT
,col_y INT
,col_z INT)
PRIMARY INDEX (col_x);
1
2
3
4
5
NUPI分布:
PI为多列的语法:
CREATE TABLE sample_2
(col_x INT
,col_y INT
,col_z INT)
PRIMARY INDEX (col_x,col_y, ..);
1
2
3
4
5
PI = (A, B)=
Hash (A) * Hash (B) + Hash (A) + Hash (B) =
Hash (B) * Hash (A) + Hash (B) + Hash (A)
本文简单介绍有关PI在数据分布这一方面的作用,其他两个单独介绍。
teradata 对于数据的切分对用户来说是透明的,我们只需要指定好PI,数据分布的工作由teradata来完成。
那么teradata是如何来分布数据的呢? teradata数据库分布数据依赖于hash算法,针对我们PI列中的值做hash。
如下图可以看出来PE负责对PI做hash,BYNET负责分布数据
Hash算法大致处理流程:
PI列的值经过hash算法返回32 bit的row hash,其中前16位为Destination Selection Word (DSW),该值代表了hash map的入口,也就决定了哪一个AMP接受数据,然后由AMP使用row hash将数据存放到磁盘中。
————————————————
版权声明:本文为CSDN博主「_假象」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wali_wang/article/details/50493077