マテリアライズドビューとは何ですか?
マテリアライズドビューとは、データの取得を高速化するために、複数の既存のテーブルのデータを組み合わせて作成される複製データテーブルをいいます。例えば、顧客データと製品データ用の 2 つのベーステーブルを持つ小売アプリケーションを考えてみましょう。顧客テーブルには顧客の名前や連絡先の詳細などの情報が含まれ、製品テーブルには製品の詳細やコストに関する情報が含まれます。顧客テーブルには、個々の顧客が購入する商品の製品 ID のみが格納されます。特定の顧客が購入した商品の詳細を取得するには、両方のテーブルをクロスリファレンスする必要があります。代わりに、顧客名と、関連付けられた製品の詳細を単一の一時テーブルに格納するマテリアライズドビューを作成できます。データ読み取りのパフォーマンスを向上させるために、マテリアライズドビューでインデックス構造を構築できます。
マテリアライズドビューにはどのようなメリットがありますか?
マテリアライズドビューは、関連データにアクセスするための高速かつ効率的な方法です。これらは、大量のデータを使用するアプリケーションにおけるクエリの最適化に役立ちます。次に、主なメリットをいくつか見ていきます。
速度
読み取りクエリは、さまざまなテーブルとデータ行をスキャンして、必要な情報を収集します。マテリアライズドビューでは、毎回新しい情報を計算することなく、新しいビューから直接データをクエリできます。クエリが複雑になればなるほど、マテリアライズドビューを使用することで節約できる時間が多くなります。
データストレージのシンプルさ
マテリアライズドビューを使用すると、複雑なクエリロジックを 1 つのテーブルに統合できます。これにより、デベロッパーは、データ変換とコードのメンテナンスをより容易に行うことができます。また、複雑なクエリを管理しやすくするのにも役立ちます。データのサブセット化を使用して、ビュー内でレプリケートする必要があるデータの量を減らすこともできます。
整合性
マテリアライズドビューは、特定の時点でキャプチャされたデータの一貫したビューを提供します。マテリアライズドビューで読み取りの一貫性を設定し、同時実行コントロールが不可欠なマルチユーザー環境であっても、データにアクセスしやすくできます。
ソースデータが変更または削除された場合でも、マテリアライズドビューではデータにアクセスできます。これは、時間が経過する中で、マテリアライズドビューを使用して時間ベースのデータスナップショットに基づいてレポートを作成できることを意味します。ソーステーブルからの分離レベルにより、データ全体の一貫性をより確実に実現できます。
改善されたアクセスコントロール
マテリアライズドビューを使用して、特定のデータに誰がアクセスできるかを制御できます。ソーステーブルへのアクセス権をユーザーに付与することなく、ユーザーのために情報をフィルタリングできます。このアプローチは、誰がどのデータにアクセスできるか、どの程度のデータを表示および操作できるようにするかを制御したい場合に実用的です。
マテリアライズドビューのユースケースにはどのようなものがありますか?
マテリアライズドビューはさまざまなシナリオで活用できます。
フィルタリングされたデータを配布する
リモートで勤務する従業員など、最近のデータを多くの場所に分散する必要がある場合は、マテリアライズドビューが役に立ちます。マテリアライズドビューを使用してデータをレプリケートし、多くのサイトに配布できます。データにアクセスする必要があるユーザーは、地理的に最も近い場所にあるレプリケートされたデータストアとインタラクションします。
このシステムにより同時実行が可能になり、ネットワーク負荷が軽減されます。これは、読み取り専用データベースを使用する場合に効果的なアプローチです。
時系列データを分析する
マテリアライズドビューはデータセットのタイムスタンプ付きスナップショットを提供するため、時間の経過に伴う情報の変化をモデル化できます。月次または週次の概要など、事前に計算されたデータの集計を保存できます。これらの使用法は、ビジネスインテリジェンスとレポートプラットフォームに役立ちます。
リモートデータインタラクション
分散データベースシステムでは、マテリアライズドビューを使用して、リモートサーバーからのデータが関係するクエリを最適化できます。リモートソースからデータを繰り返しフェッチするのではなく、データをフェッチし、そのデータをローカルのマテリアライズドビューに保存できます。これにより、ネットワーク通信の必要性が減り、パフォーマンスが向上します。
例えば、外部データベースまたは API を通じてデータを受信した場合、マテリアライズドビューがそのデータを統合して、処理しやすくします。
定期的なバッチ処理
マテリアライズドビューは、定期的なバッチ処理が必要な状況に役立ちます。例えば、金融機関は 1 日の終わりの残高と利息の計算結果を保存するために、マテリアライズドビューを使用する場合があります。または、ポートフォリオのパフォーマンスの概要を保存することも考えられます。これは、各営業日の終わりに更新できます。
マテリアライズドビューはどのように機能しますか?
マテリアライズドビューは、特定のクエリの結果を事前に計算し、データベース内に物理テーブルとして保存することによって機能します。データベースは定期的な間隔で事前計算を実行できるほか、ユーザーが特定のイベントによって事前計算をトリガーすることもできます。管理者は、マテリアライズドビューのパフォーマンスとリソース使用率をモニタリングして、マテリアライズドビューが意図した目的を継続的に果たしているようにします。
マテリアライズドビューがどのように機能するかについての概要を次に示します。
マテリアライズドビューを作成する
マテリアライズドビューを作成するために、1 つ以上のソーステーブルから必要なデータを取得するクエリを定義します。このクエリには、必要に応じて、フィルタリング、集計、結合、その他の操作が含まれる場合があります。
データベースは最初に、ソースデータに対して定義されたクエリを実行することによって、マテリアライズドビューにデータを入力します。クエリの結果はデータベースに物理テーブルとして保存され、このテーブルはマテリアライズドビューを表します。
マテリアライズドビューを更新する
マテリアライズドビューのデータは、ソーステーブルの基盤となるデータの変更を反映するために定期的に更新する必要があります。データの更新頻度は、ユースケースと要件によって異なります。
次に、データを更新するための一般的なアプローチをいくつか説明します。
完全更新
マテリアライズドビューは完全に再計算され、最新のクエリ結果で上書きされます。これは最も単純なアプローチですが、特に大規模なマテリアライズドビューの場合、リソースを大量に消費する可能性があります。
増分更新
基盤となるデータの変更のみがマテリアライズドビューに適用されます。大規模なデータセットや頻繁な更新を扱う場合は、完全更新よりも効率的です。
オンデマンド更新
一部のシステムではマテリアライズドビューをオンデマンドで更新できます。これは、特定のイベントまたはユーザーリクエストによってトリガーされます。これにより、データの更新時期をより詳細に制御できるようになりますが、マテリアライズドビューを最新の状態に保つには慎重な管理が必要です。
さまざまなシステムにおける技術面での違い
各データベース管理システムには、マテリアライズドビューを作成するための個別の方法があります。
データベース管理システム |
マテリアライズドビューの仕組み |
PostgreSQL |
PostgreSQL では、マテリアライズドビューを手動で更新し、ビュー全体を再計算する必要があります。マテリアライズドビューが作成された瞬間に、マテリアライズドビューにデータが入力されます。 |
MySQL |
MySQL はマテリアライズドビューをサポートしていません。 |
Oracle |
Oracle はマテリアライズドビューを自動的に更新しますが、オンデマンドで更新するオプションもあります。結果を提供する前にビューを更新するよう促す SQL ステートメントを記述することもできます。 |
SQL Server |
マテリアライゼーションは通常のビューのインデックスを作成するステップであるため、SQL Server では「インデックス付きビュー」という名前が用いられます。インデックス付きビューでは、基本的な SQL クエリのみを実行できます。これらは、ユーザーのために自動的に更新されます。 |
MongoDB |
MongoDB は集計関数を使用して、NoSQL 環境を除いてマテリアライズドビューに類似の機能を提供します。 |
ビューとマテリアライズドビューはどのように異なりますか?
リレーショナルデータベースでは、ビューは、複数のベーステーブルのデータを変換および結合することによって作成される一時テーブルです。これは仮想テーブルであり、それ自体にはデータは格納されません。代わりに、1 つ以上のソーステーブルに対するクエリによって定義されます。
ユーザーがビューにクエリを実行するたびに、データベースエンジンはソーステーブルに対して基礎となるクエリを実行して結果を動的に計算します。ビュー内のデータは、アクセスされるたびにソーステーブルから直接派生するため、常に最新です。
一方、マテリアライズドビューは、特定のクエリの結果を物理テーブルとしてデータベースに保存します。マテリアライズドビュー内のデータは事前に計算され、保存されています。つまり、ビューにアクセスするたびにクエリを再計算することなく、結果をすぐに表示できます。
ただし、マテリアライズドビューのデータは常に最新であるとは限りません。更新頻度を設定して、データの鮮度とクエリのパフォーマンスのバランスを取る必要があります。
マテリアライズドビューを使用する際、どのような課題がありますか?
マテリアライズドビューは考慮すべきもう 1 つのデータベースコンポーネントであるため、メンテナンスの観点からさらに複雑な層が追加されることになります。クエリおよび効率のメリットと、潜在的なストレージコストやデータ整合性の問題とのバランスを取る必要があります。
マテリアライズドビューの有益性を維持するには、更新をトリガーする効果的なルールを作成する必要があります。マテリアライズドビューを頻繁に更新すると、特に既にピーク期間である場合、システムのパフォーマンスに影響が生じる可能性があります。さらに、データがレプリケートされるため、マテリアライズドビューも大量のスペースを消費します。継続的に更新される大規模なデータベースがある場合、マテリアライズドビューは非常に多くのストレージを必要とするようになる可能性があります。
マテリアライズドビューを使用する場合は、明確な更新ルールとスケジュールを設定する必要があります。また、データの不整合、更新の失敗、ストレージの負担の増加に対処する方法も理解する必要があります。
AWS はマテリアライズドビューの要件を満たすのをどのようにサポートできますか?
マテリアライズドビューは、Amazon Redshift におけるクエリパフォーマンスを向上させるための強力なツールです。
Amazon Redshift は、機械学習を使用してワークロードを継続的にモニタリングし、有益な場合には新しいマテリアライズドビューを作成します。Redshift のこの自動マテリアライズドビュー (AutoMV) 機能は、ユーザーが作成したマテリアライズドビューと同じパフォーマンス上の利点を提供します。
AutoMV 機能は、次のようなさまざまなメリットをもたらします。
- マテリアライズドビューの作成および最新状態の維持にかかるコストと、クエリのレイテンシーにもたらされることが想定されるメリットとのバランスを取る
- 以前に作成された AutoMV をモニタリングし、不要になったら削除する
- ユーザーが作成したマテリアライズドビューと同じ基準と制限を使用して、自動的かつ増分的に更新する
さらに、デベロッパーは AutoMV を利用するためにクエリを修正する必要がありません。マテリアライズドビューを使用するためのクエリの自動書き換えにより、システムで作成された AutoMV から恩恵を受けるクエリを特定できます。これらのクエリは AutoMV を使用するように自動的に書き換えられるため、クエリの効率が向上します。
今すぐアカウントを作成して、AWS でマテリアライズドビューの使用を開始しましょう。