1.Redshiftのアーキテクチャ(簡易説明)
クライアントとCPUとの橋渡しをする役割として、マネージノードというものが存在します。
Redshiftはいくつものコンピューティングにデータを分散させて計算させ、
マネージドノードがそれらの計算結果を集約して、クライアントに返します。
1つのコンピューティングにデータを振り分けてしまったらどうなるでしょうか?
サーバーへの負荷分散と同じように、全体のスループットが低下してしまいます。
そのため、複数の計算ノードに対して、均等にデータを送るようにテーブルを設計する必要があります。
それに関係してまず覚えていかなければいけないことが、『Dist Key(分散キー)』になります
2.分散キーとは
先ほど、ノード間に均等にデータを分散させないといけないという話をしました。
それに大きく寄与するのが、Dist Keyになります。
これは、テーブル1つにつき1つしか登録ができません。
分散の仕組みは、EVEN、KEY、ALLの3つがあります。
プラスアルファでAUTOというものも存在します。
2.1 ALL分散
ALL分散は、テーブル全体のコピーを全ノードに分散させます。
EVEN分散または KEY分散によってテーブルの一部の行のみが各ノードに配置されている場合、ALL分散を行うと、テーブルが関与しているあらゆる結合で全行が確実に併置(コロケーション)されるようになります。
注意点としては、クラスタ内のノードの数だけ必要なストレージが増えるため、データをロードまたは更新したり、複数のテーブルに挿入したりするのに時間が掛かる点が挙げられます。
よって、①更新頻度が低く、②更新範囲が狭く、③データ量が少量で、④別テーブルと頻繁に結合されるテーブル(≒ディメンションテーブル)に適切な分散スタイルです。
2.2 KEY分散
KEY分散は、分散キー(DISTKEY)に指定されたカラムに含まれている値に従って行の分散を行います。
複数の一致する値が同じノードスライスに配置されるため、結合キーに基づいてテーブルのペアを分散する場合、結合するカラムに含まれている値に従って行をスライスに併置(コロケーション)します。
これによって、共通のカラムで一致する値が物理的にまとめて格納されるようになります。
適用するカラムの例としては、日付カラムなどがあります。
ORDER BYなどで、日付ごとにどの商品が売れたかなどを知りたい場合などは
KEY分散のカラムには日付カラムを設定したりします。
Transactionテーブルなどは基本的にデータ量が増大するため、キー選定には先にこの
KEY分散が選ばれる傾向があるかもしれません。
2.3 EVEN分散
EVEN分散は、特定のカラムの値に含まれている値にかかわらず、ラウンドロビン方式によって複数のスライス間で行を均等に分散させます。
テーブルが結合に関与していない場合や、KEY分散と ALL分散のどちらを選択すべきかが明確でない場合に適切な分散スタイルです。
2.4 AUTO分散
テーブル設計の際に、特に指定しない場合は、AUTO分散となります。
AUTO分散を指定すると、Redshiftはテーブルのデータ量に基づいて最適な分散スタイルを自動的に割り当てます。
例えば、データ量が少量のときにはALL分散が割り当てられ、その後データ量が増大したタイミングで、EVEN分散に変更されます。