Teradata數(shù)據(jù)庫——你需要了解的基礎(chǔ)知識

AMP (Access Module Processors)

TD里面最基礎(chǔ)的核心組件之一,它是存儲、計(jì)算TD表中每一行數(shù)據(jù)的基本單位。你會在很多地方看到它的身影。每一個(gè)AMP有自己的一塊內(nèi)存、有自己的一塊計(jì)算資源和自己的一塊磁盤空間。


AMP

一條SQL在TD中的執(zhí)行過程

TD簡單架構(gòu)

用戶輸入一條SQL,傳遞到PE,PE給出一個(gè)執(zhí)行計(jì)劃(使用explain可以看到),將計(jì)劃執(zhí)行的任務(wù)通過BYNET傳遞到各個(gè)AMP中同步執(zhí)行,AMP執(zhí)行然后返回到PE中,PE匯總返回給用戶。

TD索引

Single-AMP Retrieved是指TD可以快速的將數(shù)據(jù)定位在一個(gè)AMP中去獲取,是一種非常快的執(zhí)行計(jì)劃。一瞬間就定位到數(shù)據(jù)所在的成千上萬的AMP中的一個(gè),然后馬上取出返回。這速度你說快不快。

Unique Primary Index

唯一主鍵索引,和大部分的其他數(shù)據(jù)庫的索引一樣。當(dāng)你設(shè)置了唯一主鍵索引的好處就是,你能夠非??焖俚亩ㄎ荒愕臄?shù)據(jù),無論數(shù)據(jù)庫中有多大的數(shù)據(jù)量。你在where條件中指定了唯一主鍵索引,然后TD就會把這些數(shù)據(jù)根據(jù)索引的字段均勻的Hash到所有的AMP上去。當(dāng)你執(zhí)行一條SQL時(shí)會達(dá)到,一秒、一行、一個(gè)AMP的效果。

  • 字段值不能重復(fù)
  • 數(shù)據(jù)均勻分配到各個(gè)AMP
  • single AMP Retrieve
None-Unique Primary Index

非唯一主鍵索引,它和唯一主鍵索引不同的點(diǎn)在于能夠插入重復(fù)值。TD會根據(jù)字段值然后利用內(nèi)部的一個(gè)數(shù)學(xué)公式Hash到各個(gè)AMP上去。你會發(fā)現(xiàn)不同的AMP上的數(shù)據(jù)量并不均勻分布。相同字段值的行會存在同一個(gè)AMP中,并且緊密的存放在一起。

  • 字段值可以重復(fù)
  • 數(shù)據(jù)分布不均,相同索引字段值的數(shù)據(jù)會分布在一個(gè)AMP中
  • single AMP Retrieve
Muti-Column Primary Index

多字段組合索引,假設(shè)設(shè)置了一個(gè)聯(lián)合索引(A,B) 那么TD需要這兩個(gè)條件同時(shí)存在的情況下索引才能生效,不存在部分索引生效的情況。TD會根據(jù)兩個(gè)索引的組合一起Hash到特定的AMP中去取數(shù)據(jù)。

  • 也有Unique和None Unique兩種類型索引
  • 必須全部字段都在where條件中使用時(shí)才能生效
  • single AMP Retrieve
No Primary Index

沒有索引的表,但你進(jìn)行數(shù)據(jù)查詢時(shí)就會發(fā)生全表掃描的情況。這是不可避免的。那一般這樣的表的設(shè)計(jì)是為了數(shù)據(jù)的暫存稱為staging區(qū)域,然后你按照你的業(yè)務(wù)需求再插入到自己設(shè)計(jì)的真正的表里面去。

  • 全表掃描
  • 有特殊的設(shè)計(jì)作用,用于數(shù)據(jù)暫存
  • 在建表的時(shí)候需要顯示的指定no Primary index 否則會自動創(chuàng)建默認(rèn)的Primary index
  • 數(shù)據(jù)隨機(jī)分布,但是TD會將數(shù)據(jù)很好的均勻的分布到各個(gè)AMP中去

share nothing environment

Teradata的硬件是一個(gè)大小為一個(gè)PC電腦那么大的主機(jī),里面大概有40個(gè)AMP和4個(gè)PE,然后主機(jī)連接到磁盤區(qū)域。每一個(gè)AMP對應(yīng)有一個(gè)自己的磁盤。對應(yīng)的一塊內(nèi)存空間。并且它們之間互相不共享環(huán)境。

Share Nothing Environment

Teradata的物理節(jié)點(diǎn)架構(gòu)

我們來梳理一下TD的組成層次結(jié)構(gòu),從最小的AMP開始。

一塊內(nèi)存空間+一些數(shù)據(jù)空間=一個(gè)AMP

一定數(shù)量的AMP+一套Linux操作系統(tǒng)+PDE(parallel database extension)+Gateway+Channel Driver=一個(gè)Node

SMP Node

一定數(shù)量的Node+一定數(shù)量的物理BYNET=一個(gè)cabinet

Node與Node之間的連接
唯一主索引的執(zhí)行過程

當(dāng)在where條件里面指定了被設(shè)置為Primary index的字段,那么當(dāng)發(fā)生查詢語句時(shí)。就會根據(jù)TD里面的數(shù)學(xué)公式Hash字段值到一個(gè)輸出值上,根據(jù)輸出值在HashMap中找到記錄所在AMP,然后進(jìn)行指定AMP查找對應(yīng)的行數(shù)據(jù)。


Hashing Process
非唯一主索引的執(zhí)行過程

跟上面的執(zhí)行過程很類似,唯一不同點(diǎn)在于,rowID由兩部分組成,一部分是RowHash的值,也就是和上面一樣通過字段值被數(shù)學(xué)公式Hash得到的一個(gè)輸出值。還有一部分就是一個(gè)非唯一值。假設(shè)有兩個(gè)同樣字段的不同行數(shù)據(jù)進(jìn)來,那么會被定位到同一個(gè)AMP中。Hash值為3,那么第一個(gè)行數(shù)據(jù)的真實(shí)RowID為3,1 第二個(gè)為3,2。并且相同的RowHash的數(shù)據(jù)會被分組放在一起。


RowID

那實(shí)際上唯一主索引就是非唯一主索引的特殊情況,就是它的uniqueness Value一直是1.然后當(dāng)進(jìn)入一個(gè)AMP中去查找對應(yīng)的RowHash值的位置的時(shí)候,它會采用非常高效率的簡單算法,二分搜索。算法復(fù)雜度為log(N)快速定位到相應(yīng)的RowHash的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容