概要
各論に入る前に総論。 MPPでクエリ実行するために必要な制限事項を設計/実装するために、
とりあえず、何故その制限事項が必要なのかを理解しておく必要がありそう。
並列処理
- MPP(Massively Prallel Processing). シンプルで安価なプロセッサを多数集積して一台のコンピュータとする手法.
- 各ノードの各コアは、同じコンパイル済みクエリセグメントをデータ全体の一部分に対して実行する。
- テーブルの行をコンピューティングノードに分配し分散処理する。
列指向
- 通常のアプリケーションとデータウェアハウスではクエリで取得したいデータが異なる.
- 通常のアプリケーションは行の大方の列が欲しい一方で、データウェアハウスは行の中の一部の列が欲しい。
- データウェアハウスが1行の全ての列を取得する方式を使用すると、ほとんどの列は無駄になってしまう.
- ある行の1列にだけ関心がある状況で15行分欲しい場合、行指向であれば100回、列指向であれば5回のディスクI/O。
データ圧縮
- 列指向で同じ列のデータを取る場合、同じ列に入るデータの乱れ方には傾向があるはずなので、データ圧縮が効きやすい。
- データ圧縮によりディスクI/Oがさらに減少する。
クエリオプティマイザ
- MPP対応のクエリオプティマイザ。複数のコンピューティングノードで並列処理するための最適化が走る。
結果のキャッシュ
- リーダーノートでキャッシュする必要性があるクエリと結果をキャッシュする。
- サイズの大きなクエリ結果セットはキャッシュしない。
- キャッシュするか否かは、キャッシュ内のエントリ数とAmazon Redshiftクラスターのインスタンスタイプが含まれる。