

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Redshift データウェアハウスのアーキテクチャコンポーネント
<a name="data-warehouse-arch-components"></a>

Amazon Redshift データウェアハウスのコアアーキテクチャコンポーネントの基本事項について理解しておくことをお勧めします。この知識は、最適なパフォーマンスを実現するためにクエリとテーブルを設計する方法をよりよく理解するのに役立ちます。

Amazon Redshift のデータウェアハウスは、次のコアアーキテクチャコンポーネントで構成されます。
+ **クラスター** – 1 つ以上のコンピューティングノードで構成されるクラスターは、Amazon Redshift データウェアハウスのコアインフラストラクチャコンポーネントです。コンピューティングノードは外部アプリケーションに対して透過的ですが、クライアントアプリケーションはリーダーノードとのみ直接やり取りします。一般的なクラスターには、2 つ以上のコンピューティングノードがあります。コンピューティングノードは、リーダーノードを介して調整されます。
+ **リーダーノード** – リーダーノードは、クライアントプログラムとすべてのコンピューティングノードの通信を管理します。また、リーダーノードは、クエリがクラスターに送信されるたびにクエリを実行するためのプランも準備します。プランの準備が整うと、リーダーノードでコードをコンパイルし、コンパイル済みのコードをコンピューティングノードに配布してから、データの一部分を各コンピューティングノードに割り当てて、クエリ結果を処理します。
+ **コンピューティングノード** – コンピューティングノードでクエリを実行します。リーダーノードは、クエリ実行プランの個々の要素にコードをコンパイルし、コードを個々のコンピューティングノードに割り当てます。コンピューティングノードは、コンパイル済みのコードを実行し、最終的な集計のために中間結果をリーダーノードに返送します。各コンピューティングノードには、専用の CPU、メモリ、接続されているディスクストレージがあります ワークロードが増えるに従って、ノードの数を増やすかノードの種類をアップグレードして、または両方を行って、クラスターのコンピューティング能力とストレージ容量を拡張できます。
+ **ノードスライス** – コンピューティングノードはスライスと呼ばれる単位に分割されます。コンピューティングノードの各スライスにノードのメモリとディスク容量の一部が割り当てられ、ノードに割り当てられたワークロードの一部分を処理します。スライスは、並列処理を行って操作を完了します。データは、特定のテーブルの[分散スタイル](https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-best-dist-key.html)と分散キーに基づいて、スライス間で分散されます。データを均等に分散することで、Amazon Redshift がワークロードをスライスに均等に割り当てられるようになり、並列処理の利点を最大化できます。コンピューティングノードあたりのスライス数は、ノードのタイプに基づいて決定されます。詳細については、Amazon Redshift ドキュメントの「[Amazon Redshift のクラスターとノード](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes)」****を参照してください。
+ **超並列処理 (MPP)** – Amazon Redshift は MPP アーキテクチャを使用して、複雑なクエリや膨大な量のデータであっても、データを迅速に処理します。複数のコンピューティングノードが一部のデータに同じクエリコードを実行して、並列処理を最大化します。
+ **クライアントアプリケーション** – Amazon Redshift は、さまざまなデータロード、抽出、変換、およびロード (ETL)、ビジネスインテリジェンス (BI) レポート、データマイニング、そして分析ツールと統合されています。すべてのクライアントアプリケーションは、リーダーノードを介してのみクラスターと通信します。

次の図は、Amazon Redshift データウェアハウスのアーキテクチャコンポーネントがどのように連携してクエリを高速化するかを示しています。



![クライアントからのクエリを処理する Amazon Redshift クラスター内のリーダーノードとコンピューティングノード。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/query-best-practices-redshift/images/redshift-data-warehouse.png)


クエリのライフサイクルには、次の 7 つのステージがあります。

1. クエリの受信と解析:
   + リーダーノードはクエリを受け取り、SQL を解析します。
   + パーサーは、元のクエリの論理構造を表す初期クエリツリーを生成します。
   + Amazon Redshift は、このクエリツリーをクエリオプティマイザに入力します。

1. クエリの最適化:
   + オプティマイザを使用してクエリを評価し、必要なときはクエリを書き換えて効率性を最大限に高めます。
   + このプロセスにより、関連するクエリが複数作成されて、単一のクエリが置き換えられることがあります。

1. クエリプランの生成:
   + オプティマイザによって、実行用のクエリプラン (または必要に応じて複数のプラン) が生成されます。
   + クエリプランは、結合の種類、結合の順序、集計方法、データ分散要件などの実行オプションを指定します。

1. 実行エンジンの変換:
   + 実行エンジンは、クエリプランをステップ、セグメント、ストリームに変換します。
     + **ステップ** – クエリの実行中に必要な個々のオペレーションを表します。コンピューティングノードはステップを組み合わせることによってクエリ、結合、または他のデータベース操作を実行できます。
     + **セグメント** – 1 つのプロセスで実行できる複数のステップを組み合わせます。セグメントは、コンピューティングノードのスライスによって実行可能な最小コンパイルユニットです (スライスは、Amazon Redshift の並列処理単位です)。
     + **ストリーム** – 使用可能なコンピューティングノードのスライスに分配されたセグメントのコレクション。
   + 実行エンジンは、ステップ、セグメント、ストリームに基づいてコンパイルされたコードを生成します。コンパイルされたコードの実行は解釈されたコードよりも速く、使用するコンピューティングキャパシティも少なくなります。
   + リーダーノードは、コンパイルされたコードをコンピューティングノードにブロードキャストします。

1. 同時実行:
   + このステップは、ストリームごとに 1 回実行されます。
   + コンピューティングノードのスライスは、クエリセグメントを並列的に実行します。
   + このプロセスの間は、Amazon Redshift でネットワーク通信、メモリ使用量、ディスク管理を最適化し、クエリプランのステップから次のステップに中間結果を渡します。
   + この最適化は、クエリ実行の高速化に役立ちます。

1. ストリーミング処理:
   + このステップは、ストリームごとに 1 回実行されます。
   + エンジンでストリームごとに実行可能セグメントを作成し、効率的な並列処理を実現します。

1. 最終的なソートと集計:
   + リーダーノードは、クエリに必要な最終的なソートまたは集計に対処します。
   + 完了したら、リーダーノードからクライアントに結果が返されます。

アーキテクチャコンポーネントについては、Amazon Redshift ドキュメントの「[データウェアハウスシステムのアーキテクチャ](https://docs.aws.amazon.com/redshift/latest/dg/c_high_level_system_architecture.html)」を参照してください。