前の投稿: Teradataとは何ですか?Teradataはどのように文字列を配布しますか?
- Teradataはハッシュアルゴリズムを使用して、AMP間でテーブル行をランダムに分散します(利点:データ量に関係なく、分布は同じであり、人口統計データではなく行の内容に依存します)
- プライマリインデックスは、テーブル行がAMP間で均等に分散されるか不均等に分散されるかを決定します
- テーブル行の均等な分散は、均一な負荷分散につながります
- 各AMPは、各テーブルの行のサブセットのみを担当します。
- 行は順序が狂っています(利点:順序を維持するためのサポートは必要ありません。順序は送信された要求に依存しません)
主キー(PK)対 プライマリインデックス(PI)
主キーは、各行を一意に識別するリレーショナルモデルの規則です。
プライマリインデックスは、行の分散とアクセスを定義するTeradataの規則です。
適切に設計されたデータベースには、PIがPKと同じテーブルと、PIがPK以外の列で定義され、アクセスパスに影響を与える可能性があるテーブルが含まれます。
主キー(PK) | プライマリインデックス(PI) |
---|
論理データモデリングの概念 | 回線の分配とアクセスのメカニズム |
TeradataはPK定義を必要としません | テーブルにはPIが1つ必要です |
列制限なし | 1〜64列の場合があります |
PKは論理データモデルで定義されます | PIはテーブルの作成時に定義されます |
値は一意である必要があります。 | 値は一意である必要はありません |
一意性により各行が識別されます | AMPに文字列を配置するために使用されます |
値を変更しないでください。 | 値は変更される場合があります。 |
null値を受け入れることはできません | null値をとることがあります |
アクセスパスには適用されません | 最も効果的なアクセスパスを決定します。 |
論理的に正しいために選択されました。 | 物理的性能の複合値に選択 |
PIには、
UPI (一意のプライマリインデックス)と
NUPI (非一意のプライマリインデックス)の2種類があります。 UPIを使用する場合、文字列はAMP間で均等に分散され、NUPIを使用する場合、同じインデックス値を持つ文字列は同じAMPを参照します。
UPIおよびNUPIを使用したテーブルの作成:
CEATE TABLE Table1 ( Col1 INTEGER, Col2 INTEGER ) UNIQUE PRIMARY INDEX (Col1);
CEATE TABLE Table2 ( Col1 INTEGER, Col2 INTEGER ) PRIMARY INDEX (Col2);
文字列のハッシュ分布
プライマリインデックス値はハッシュアルゴリズムに渡されます。これにより、すべてのAMP間で一意の値が均一に分散されます。 このアルゴリズムは、32ビットのハッシュ文字列値を生成します。 最初の16ビット(ハッシュバケット番号)は、ハッシュマップへのポインターとして使用されます。 ハッシュ値は、ハッシュアルゴリズムを使用して計算されます。 ハッシュマップはシステムごとに一意に構成され、DSW(統計キー)を特定のAMPに関連付ける配列です。 同じ数のAMPを持つ2つのシステムは、同じハッシュマップを持ちます。 システム内のAMPの数を変更するには、ハッシュマップを変更する必要があります。
NoPIテーブル
NoPIテーブルは、
プライマリインデックスのないテーブルです(Teradataの第13バージョンの機能)。 この場合、新しい行は常にテーブルの最後に追加され、ハッシュシーケンスの途中には追加されません。
回線はAMP間でも分散されます。 新しいランダムコードは、文字列または文字列のグループを受け取るAMPを決定します。 AMP内では、行は単にテーブルの最後に追加されます。 これらは一意の識別子を持ち、値の一意性を高めます。
利点:
テーブルは、中間ETLテーブル(抽出、変換、ロード-プライマリインデックスを持たない)のオフセットを減らします。
NoPIステージングテーブルへの読み込み(FastLoadおよびTPump Array Insert)は高速です。
PPIおよびMLPPI
PPI (Partitioned Primary Index)は、範囲制限を指定するクエリを送信するときに、大きなテーブルのパフォーマンスを向上させるために使用されるパーティションメカニズムです。
PPIを使用したデータ分散は、PIに基づいています。プライマリインデックス->ハッシュ値->行を受信するAMPの定義。 NPPI(パーティションプライマリインデックスなし)を使用すると、AMPの文字列はハッシュ文字列の順序で配置されます。 PPIを使用する場合、文字列は最初にパーティションに配置され、次にハッシュ文字列の順に配置されます。
MLPPI (マルチレベルパーティションプライマリインデックス)は、マルチパーティション化または非圧縮結合インデックスの使用を可能にします。 マルチレベルのパーティション分割では、各パーティションレベルは式
RANGE_Nまたは
CASE_Nを使用して個別に決定されます。
パーティション化(パーティション化)の目的は、テーブル内のデータがめったに更新されない場合(たとえば、さまざまなログ)にシステムの負荷を軽減することです。
PS本日
、Teradataのブログ
でTeradata DBMSのストレージ構造の物理設計というタイトルの記事を公開したため、
セカンダリインデックスについては説明しません。
会社が定期的な一連の記事を継続し、ドキュメントを英語から翻訳する必要がないことを願っています。