Azure Cosmos DB for Apache Cassandra の具体化されたビュー (プレビュー)
適用対象: Cassandra
重要
Azure Cosmos DB for Cassandra の具体化されたビューは、現在プレビュー段階です。 この機能は、Azure portal を使用して有効にすることができます。 具体化されたビューのこのプレビューは、サービス レベル アグリーメントなしで提供されます。 現時点では、具体化されたビューは運用環境のワークロードには推奨されません。 このプレビューの特定の機能は、サポートされない場合や制限される場合があります。 詳細については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
具体化されたビューを定義すると、主キー以外のフィルターを使用して、ベース テーブル (または Azure Cosmos DB 上のコンテナー) に対して効率的にクエリを実行するための手段を提供できます。 ユーザーがベース テーブルに書き込むと、具体化されたビューがバックグラウンドで自動的に作成されます。 このビューでは、効率的な検索のために別の主キーを使用できます。 また、このビューには、ベース テーブルから明示的に射影された列のみが含まれます。 このビューは、読み取り専用のテーブルになります。
セカンダリ インデックスを使用すると、パーティション キーを指定せずに列ストアに対してクエリを実行できます。 ただし、このクエリは、カーディナリティが高い列または低い列には効果的ではありません。 このクエリでは、すべてのデータをスキャンして小規模な結果セットを得ることができます。 このようなクエリは、最終的にクロスパーティション クエリとして気付かずに実行されるため、最終的にコスト高になります。
具体化されたビューを使用すると、次のことができます。
- クロスパーティション スキャンを存続させるために参照テーブルまたはマッピング テーブルとして使用する (このようにしないと、コスト高のクエリになります)。
- SQL ベースの条件述語を指定して、事前条件を満たす特定の列とデータのみを設定する。
- 変更フィード トリガーを使用して個別コレクションとして一般的に保存されるイベントベースのシナリオを簡略化するリアルタイム ビューを作成する。
具体化されたビューの利点
具体化されたビューには、次のような多くの利点があります (これら以外にも利点があります)。
- 具体化されたビューを使用して、サーバー側の非正規化を実施できます。 サーバー側の非正規化により、クライアント アプリケーションで複数の独立したテーブルと計算が複雑な非正規化を回避できます。
- 具体化されたビューでは、ベース テーブルとの整合性を維持するためにビューが自動的に更新されます。 この自動更新では、通常、ベース テーブルとビューへのデュアル書き込みを実行するカスタム ロジックが実装されているため、クライアント アプリケーションは責任を負わずに済みます。
- 具体化されたビューでは、単一のビューから読み取ることで、読み取りのパフォーマンスが最適化されます。
- 具体化されたビューのスループットを個別に指定できます。
- ビューをハイドレートするための要件に対応するために、具体化されたビューのビルダー レイヤーを構成できます。
- 具体化されたビューでは、書き込み操作で必要なのはベース テーブルへの書き込みだけであるため、書き込みのパフォーマンスが向上します。
- また、Azure Cosmos DB の具体化されたビューの実装はプル モデルに基づいています。 この実装は書き込みのパフォーマンスに影響しません。
具体化されたビューの使用を開始する
Azure CLI を使用して新しい API for Cassandra アカウントを作成し、ネイティブ コマンドまたは REST API 操作を使用して具体化されたビュー機能を有効にします。
Azure portal にサインインします。
API for Cassandra アカウントに移動します。
リソース メニューで [設定] を選択します。
[設定] セクションで [Materialized View for Cassandra API (Preview)] (Cassandra API の具体化されたビュー (プレビュー)) を選択します。
新しいダイアログで [有効化] を選択して、このアカウントに対してこの機能を有効にします。
しくみ
API for Cassandra では、具体化されたビューのビルダー コンピューティング レイヤーを使用してビューが維持されます。
ビューをハイドレートするための待機時間とラグの要件に基づいて、ビュー ビルダーのコンピューティング インスタンスを柔軟に構成できます。 技術的な見地から、このコンピューティング レイヤーは、データ サイズが大きくパーティションの数が多い場合でも、パーティション間の接続をより効率的に管理するのに役立ちます。
コンピューティング コンテナーは、Azure Cosmos DB アカウント内のすべての具体化されたビュー間で共有されます。 プロビジョニングされた各コンピューティング コンテナーは、ベース テーブル パーティションから変更フィードを読み取り、ターゲットの具体化されたビューにデータを書き込む複数のタスクを生成します。 コンピューティング コンテナーは、アカウントの各具体化されたビューの具体化されたビュー定義に従いデータを変換します。
具体化されたビュー ビルダーを作成する
具体化されたビュー ビルダーを作成すると、自動的にデータを変換し、具体化されたビューに書き込むことができます。
Azure portal にサインインします。
API for Cassandra アカウントに移動します。
リソース メニューで [Materialized Views Builder] (具体化されたビュー ビルダー) を選択します。
[Materialized Views Builder] (具体化されたビュー ビルダー) ページで、ビルダーの SKU とインスタンス数を構成します。
Note
このリソース メニューのオプションとページは、アカウントに対して具体化されたビュー機能が有効になっている場合にのみ表示されます。
[保存] を選択します。
具体化されたビューを作成する
アカウントと具体化されたビュー ビルダーが設定された後、CQLSH を使用して具体化されたビューを作成できます。
Note
スタンドアロンの CQLSH ツールがまだインストールされていない場合は、CQLSH ツールのインストールに関するページを参照してください。 また、このツールで接続文字列を更新する必要もあります。
具体化されたビューを作成するためのサンプル コマンドをいくつか次に示します。
最初に、
uprofile
という名前のキースペースを作成します。CREATE KEYSPACE IF NOT EXISTS uprofile WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };
次に、キースペース内に
user
という名前のテーブルを作成します。CREATE TABLE IF NOT EXISTS uprofile.USER (user_id INT PRIMARY KEY, user_name text, user_bcity text);
次に、同じキースペース内に
user_by_bcity
という名前の具体化されたビューを作成します。 クエリを使用して、ベース テーブルからビューにデータを射影する方法を指定します。CREATE MATERIALIZED VIEW uprofile.user_by_bcity AS SELECT user_id, user_name, user_bcity FROM uprofile.USER WHERE user_id IS NOT NULL AND user_bcity IS NOT NULL PRIMARY KEY (user_bcity, user_id);
ベース テーブルに行を挿入します。
INSERT INTO uprofile.USER (user_id, user_name, user_bcity) VALUES ( 101, 'johnjoe', 'New York' ); INSERT INTO uprofile.USER (user_id, user_name, user_bcity) VALUES ( 102, 'james', 'New York' );
具体化されたビューに対してクエリを実行します。
SELECT * FROM user_by_bcity;
具体化されたビューからの出力を確認します。
user_bcity | user_id | user_name ------------+---------+----------- New York | 101 | johnjoe New York | 102 | james (2 rows)
必要に応じて、リソース プロバイダーを使用して具体化されたビューを作成または更新することもできます。
- API for Cassandra でビューを作成または更新する
- API for Cassandra でビューを取得する
- API for Cassandra でビューをリストする
- API for Cassandra でビューを削除する
- API for Cassandra でビューのスループットを更新する
現在の制限
API for Cassandra の具体化されたビューのプレビュー実装には、いくつか制限があります。
- アカウントで具体化されたビューのサポートが有効化される前に存在していたテーブルでは、具体化されたビューは作成できません。 具体化されたビューを使用するには、この機能を有効にした後に新しいテーブルを作成します。
- 具体化されたビューの定義の
WHERE
句では、IS NOT NULL
フィルターのみが現在許可されています。 - ベース テーブルに対して具体化されたビューが作成された後、そのベース テーブルのスキーマでは
ALTER TABLE ADD
操作は許可されません。ALTER TABLE APP
は、具体化されたビューの定義で*
が選択されていない場合にのみ許可されます。 - パーティション キー サイズには 2 Kb という制限があり、またクラスター化キー サイズの合計長には 1 Kb という制限があります。 このサイズ制限を超えると、信頼できるメッセージが有害メッセージ キューに入ります。
- ベース テーブルにユーザー定義型 (UDT) があり、具体化されたビューの定義に
SELECT * FROM
があるか、射影された列のいずれかに UDT がある場合、アカウントで UDT の更新は許可されません。 - リージョンの自動フェールオーバー後、具体化されたビューがベース テーブルと一致しなくなる場合があります。 この不整合を回避するには、フェールオーバー後に具体化されたビューを再作成します。
- 32 個のコアを使用した具体化されたビュー ビルダー インスタンスの作成はサポートされていません。 必要に応じて、これよりも少ない数のコアを使用して複数のビルダー インスタンスを作成できます。
上記の制限に加えて、次の追加の制限事項を考慮してください。
- 可用性ゾーン
- 可用性ゾーンが有効になっているリージョンのアカウントでは、具体化されたビューを有効化できません。
- アカウントで
enableMaterializedViews
が true に設定された後、可用性ゾーンを含む新しいリージョンを追加することはサポートされていません。
- 定期的なバックアップと復元
- 具体化されたビューは、復元プロセスでは自動的に復元されません。 復元プロセスが完了した後、具体化されたビューを再作成する必要があります。 具体化されたビューとビルダーを再作成する前に、復元されたアカウントで
enableMaterializedViews
を構成する必要があります。
- 具体化されたビューは、復元プロセスでは自動的に復元されません。 復元プロセスが完了した後、具体化されたビューを再作成する必要があります。 具体化されたビューとビルダーを再作成する前に、復元されたアカウントで
- Apache Cassandra
- 具体化されたビューで競合解決ポリシーを定義することは許可されません。
- 具体化されたビューで書き込み操作は許可されません。
- クロス ドキュメント クエリと集計関数の使用は、具体化されたビューではサポートされていません。
- 具体化されたビューのスキーマは、作成後に変更できません。
- ベース テーブルに基づいて少なくとも 1 つの具体化されたビューが定義されている場合、そのベース テーブルの削除は許可されません。 最初にすべてのビューを削除する必要があり、その後、ベース テーブルを削除できます。
- 静的列を含むコンテナーで具体化されたビューを定義することは許可されません。