多次元インデックスのスキーマを動的に変更することで、カラムの追加、更新、削除、またはルーティングキーや事前ソート方式の変更が可能です。これにより、新しいビジネス要件への適応やパフォーマンスの最適化に役立ちます。このプロセスでは、変更されたスキーマを持つカナリアインデックスを作成し、データを同期し、トラフィックの重み付けによる A/B テストを実行し、ソースインデックスとカナリアインデックスのスキーマを交換して、最後にカナリアインデックスを削除します。
仕組み
Tablestore のデータテーブルはスキーマフリーですが、多次元インデックスには厳格なスキーマがあります。多次元インデックスを作成する際には、クエリ対象とするカラムを定義する必要があります。ビジネスの変化やパフォーマンスチューニングに対応するために、このスキーマの変更が必要になることがよくあります。一般的なシナリオは次のとおりです。
-
インデックスカラムの追加:ビジネスの発展に伴い、追加のカラムをクエリする必要が生じることがあります。
-
インデックスカラムの更新:カラムタイプ、仮想カラム、配列設定、アナライザー、日付形式などのプロパティを変更できます。
-
インデックスカラムの削除:クエリに不要になったカラムを削除できます。
-
ルーティングキーの変更:適切に定義されたルーティングキーは、読み込み増幅を削減し、クエリパフォーマンスを向上させることができます。
-
事前ソートの変更:クエリにおけるデータのソート順がインデックスの事前ソート設定と一致する場合、クエリ速度が向上します。
ワークフロー
この一時的なインデックスは動的に状態が変化するため、クエリに使用しないでください。この機能がお客様のニーズを満たさない場合は、チケットを起票 してお問い合わせください。
以下の図は、スキーマを動的に変更するためのワークフローを示しています。プロセス全体がアプリケーションに対して透過的であるため、アプリケーションコードを変更することなくスキーマを変更できます。
次の表は、多次元インデックスのスキーマを変更するための主要な手順を説明しています。
|
手順 |
アクション |
説明 |
|
1 |
カナリアインデックスの作成 |
ソースインデックス用のカナリアインデックスを作成し、必要に応じてカラムの追加、変更、削除を行って新しいスキーマを定義します。 |
|
2 |
インデックスの同期進捗の確認 |
次に進む前に、すべての既存データと増分データが同期され、カナリアインデックスの同期がソースインデックスに追いつくまで待機します。 |
|
3 |
A/B テストの重み付け設定 |
A/B テストにより、ソースインデックスとカナリアインデックスにクエリトラフィックを分散させ、新しいスキーマを検証できます。 カナリアインデックスがクエリトラフィックの 100% を処理するまで、徐々にトラフィックをリダイレクトします。 |
|
4 |
インデックススキーマの交換 |
すべてのクエリトラフィックがカナリアインデックスに切り替えられた後、ソースインデックスとカナリアインデックスのスキーマを交換します。 交換後、ソースインデックス名は新しいスキーマに、カナリアインデックス名は古いスキーマに関連付けられます。その後、すべてのクエリトラフィックは、新しいスキーマを使用するソースインデックス名に転送されます。 |
|
5 |
カナリアインデックスの削除 |
スキーマを交換し、インデックスが期待どおりに機能することを確認した後、1 日などの安定期間を経てからカナリアインデックスを削除します。 |
手順
-
インデックス タブに移動します。
-
Tablestore コンソールにログインします。
-
上部メニューで、リージョンとリソースグループを選択します。
-
概要 ページで、インスタンス名をクリックするか、インスタンスの管理 列の 操作 をクリックします。
-
インスタンスの詳細 タブの テーブルリスト エリアで、データテーブル名をクリックするか、インデックス 列の 操作 をクリックします。
-
-
ソースインデックスに基づいてカナリアインデックスを作成します。
-
インデックス タブで多次元インデックスを見つけ、スキーマの変更 列の 操作 をクリックします。
-
インデックスの再作成 ダイアログボックスで、必要に応じてインデックスフィールドを追加、変更、または削除します。
インデックスの再作成 ダイアログボックスには、次の設定項目が含まれています。
-
インデックスの基本情報:[インデックスタイプ] (例:多次元インデックス)、[インスタンス名]、[テーブル名] (例:
exampletable)、[インデックス名] (例:exampletable_index)、および [カナリアインデックス名] (例:exampletable_index_reindex)。 -
フィールド設定テーブル:各行で [フィールド名]、[フィールドタイプ]、[インデックスパラメーター]、[配列]、[ハイライト]、[仮想カラム] のプロパティを設定できます。[+] ボタンをクリックしてフィールドを追加するか、削除アイコンをクリックしてフィールドを削除できます。
-
下部に 詳細設定 の切り替え項目があります。設定が完了したら、OK をクリックします。
-
-
ルーティングキーまたは事前ソート方式を変更するには、詳細設定 を有効にし、次の表で説明するパラメーターを設定します。
パラメーター
説明
ルーティングキー
カスタムルーティングフィールドを指定します。1 つ以上の主キーカラムをルーティングフィールドとして選択できます。
データがインデックスに書き込まれる際、システムはルーティングキーの値を使用してデータの分散を決定します。同じルーティングキー値を持つレコードは同じパーティションにインデックスが作成されます。詳細については、「多次元インデックスでのルーティングフィールドの使用」をご参照ください。
事前ソート
多次元インデックス内のデータのデフォルトのソート方法です。事前ソートは、クエリ結果が返されるデフォルトの順序を決定します。詳細については、「インデックスの事前ソート」をご参照ください。
-
主キーでソートするには、デフォルトソート を選択します。
-
フィールド値または主キーカラムの組み合わせでソートするには、カスタムソート を選択して設定を構成します。
-
プライマリーキーの事前ソート や フィールドの事前ソート などのソートタイプを選択し、追加 をクリックします。
-
フィールド名とソート順を選択します。
サポートされているソート順は昇順と降順です。
重要フィールドの事前ソート を選択した場合にのみ、フィールド名を選択する必要があります。
カスタムソートを使用する場合、必要に応じて主キー事前ソートとフィールド事前ソートの両方を設定できます。
-
-
-
OK をクリックします。
-
インデックスの比較 ダイアログボックスで、ソースインデックスとカナリアインデックスのルーティングキー、事前ソート、スキーマの比較内容を確認します。情報が正しいことを確認した後、OK をクリックします。
-
-
インデックスの同期情報を確認します。
-
ソースインデックスの横にある
アイコンをクリックするか、ソースインデックス名をクリックします。ソースインデックスのカナリアインデックスが表示されます。
-
カナリアインデックスの グレーインデックスの使用 列にある 操作 をクリックします。
重要カナリアインデックスは、完全なデータ同期フェーズと増分データ同期フェーズを経ます。
-
データ同期が完了する前に、操作 列の グレーインデックスの使用 ボタンにポインターを合わせると、切り替え可能、セキュリティリスクあり を示すツールチップが表示され、切り替えが無効になります。
-
カナリアインデックスがソースインデックスに追いつき、操作 列の グレーインデックスの使用 ボタンにポインターを合わせると、安全に切り替え可能 を示すツールチップが表示されます。その後、次のステップに進むことができます。
-
-
グレーインデックスの使用 ダイアログボックスで、インデックスの同期情報を確認します。
ダイアログボックスの上部には、[データステータス] (同期中) と [切り替えステータス] (切り替え可能) が表示されます。インデックス情報は、ソースインデックスとカナリアインデックスの 2 つの列に表示されます。各列には次のフィールドが含まれています。
-
[同期ステータス]
-
[行数]
-
[作成日時]
-
[最終同期時刻]
-
[同期レイテンシ]
-
[データライフサイクル]
下部の 操作 セクションでは、スライダーを使用して [ソースインデックス] と [カナリアインデックス] のトラフィックの重みを調整し、重みの設定 をクリックして設定を保存するか、インデックスの切り替え をクリックしてインデックスの切り替えを完了できます。
-
-
-
同期が完了したら、トラフィックの重みを設定して A/B テストを実行します。
A/B テストにより、ソースインデックスとカナリアインデックス間でクエリトラフィックを分散させることで、新しいスキーマを検証します。次の手順に進むには、すべてのトラフィックをカナリアインデックスに切り替える必要があります。
-
操作 ダイアログボックスの グレーインデックスの使用 セクションで、スライダーをドラッグしてソースインデックスとカナリアインデックスの重みを調整し、重みの設定 をクリックします。
-
重みの設定 ダイアログボックスで、重みデータとスキーマの比較を確認します。
-
情報が正しいことを確認した後、重みの設定 をクリックします。
-
表示される確認ダイアログボックスで、OK をクリックします。
-
-
すべてのクエリトラフィックがカナリアインデックスに切り替えられた後、ソースインデックスとカナリアインデックスのスキーマを交換します。
交換後、ソースインデックス名は新しいスキーマに、カナリアインデックス名は古いスキーマに関連付けられます。その後、すべてのクエリトラフィックは、新しいスキーマを使用するソースインデックス名に転送されます。
グレーインデックスの使用 ダイアログボックスで、データステータスが [カナリアリリース中]、切り替えステータスが [安全に切り替え可能]、ソースインデックスの重みが [0]、カナリアインデックスの重みが [100] であることを確認し、インデックスの切り替え をクリックします。
-
操作 ダイアログボックスの グレーインデックスの使用 セクションで、インデックスの切り替え をクリックします。
-
インデックスの切り替え ダイアログボックスで、ソースインデックスとカナリアインデックスのルーティングキー、事前ソート、スキーマの比較内容を確認します。情報が正しいことを確認した後、切り替えの確認 をクリックします。
-
-
スキーマを交換し、インデックスが期待どおりに機能することを確認した後、1 日などの安定期間を経てからカナリアインデックスを削除します。
グレーインデックスの使用 ダイアログボックスに、データステータスが [リリース済み]、切り替えステータスが [安全に切り替え可能]、操作 エリアに [ソースインデックス] のトラフィックが 100、[カナリアインデックス] のトラフィックが 0 と表示されていることを確認します。
-
グレーインデックスの使用 ダイアログボックスで、グレースケールインデックスを削除する をクリックします。
-
[カナリアリリースを完了し、古いインデックスを削除してもよろしいですか?] ダイアログボックスで、削除するカナリアインデックスに関する情報が正しいことを確認します。 次に、テキストボックスに
I have confirmed that the new index data has been synchronized and has been in canary release for a period of timeと入力します。 -
OK をクリックします。
-
安全保護措置
運用の安全性を確保するために、Tablestore はインデックス変更中のリスクを最小限に抑えるためのロールバックメカニズムと切り替えアラートを提供します。
-
ロールバックメカニズム
動的スキーマ変更プロセスの主要なステップは、ロールバックに対応しています。
-
カナリアインデックスを作成した後、そのスキーマが正しくないことが判明した場合は、それを削除して新しいカナリアインデックスを作成できます。
-
A/B テスト中、トラフィックの重みを調整することで、徐々にトラフィックをカナリアインデックスにリダイレクトできます。問題が発生した場合は、いつでも重みをリセットしてトラフィックをソースインデックスに戻すことができます。
-
スキーマを交換した後、問題が見つかった場合は、いつでも 切り替えのキャンセル を実行してソースインデックスのスキーマに戻すことができます。インデックスの切り替え と 切り替えのキャンセル は逆の操作です。
-
-
切り替えアラート
カナリアインデックスがソースインデックスと完全に同期される前にトラフィックを切り替えると、クエリが古いデータを返す可能性があります。Tablestore は、両方のインデックスの同期ステータスと最終同期時刻に基づいて、切り替えが安全かどうかを判断します。
次の場合、Tablestore はスイッチオーバーが 安全に切り替え可能 であると判断します。
-
ソースインデックスが完全同期フェーズにあり、カナリアインデックスが完全または増分フェーズにある場合。これは、カナリアインデックスがソースインデックスに追いついたことを意味します。
-
ソースインデックスとカナリアインデックスの両方が増分同期フェーズにあり、カナリアインデックスの最終同期時刻がソースインデックスの最終同期時刻から 60 秒を超えて遅れていない場合。
-
課金
カナリアインデックスの構築やデータ書き込みに対しては課金されません。両方のインデックスが消費するストレージ、およびインデックスにプロビジョニングされた予約済み読み取り CU に対して課金されます。詳細については、「多次元インデックスの課金項目」をご参照ください。
関連ドキュメント
-
テーブル構造を変更せずに新しいフィールドやデータ型をクエリするには、多次元インデックスのスキーマを変更するか、新しい多次元インデックスを作成する際に仮想カラム機能を使用できます。詳細については、「仮想カラム」をご参照ください。
-
Tablestore は、さまざまなシナリオに対応する多様なクエリタイプをサポートしています。これには、MatchAll クエリ、match クエリ、Match Phrase クエリ、term クエリ、Terms クエリ、Wildcard クエリ、Prefix クエリ、Suffix クエリ、トークン化ベースのワイルドカードクエリ、Range クエリ、Bool クエリ、Nested クエリ、Geo-distance クエリ、Geo-bounding box クエリ、Geo-polygon クエリ、Exists クエリ、Collapse (個別)、および 仮想カラム を使用してデータをクエリできます。
-
SQL ステートメントを使用して多次元インデックス内のさまざまなタイプのデータを迅速にクエリするには、SQL クエリ機能を使用できます。詳細については、「SQL クエリ」、「多次元インデックスのマッピングテーブルの作成」、「データのクエリ」、「全文検索」、「配列型」、「Nested 型」、および「仮想カラム」をご参照ください。
-
多次元インデックスの集計機能を使用して、最小値、最大値、合計、平均の検索、行数のカウント、個別値のカウント、パーセンタイルの計算、フィールド値、範囲、地理的位置、またはフィルター条件によるグループ化、ヒストグラムの作成、またはネストされたクエリの実行などのデータ分析を実行します。詳細については、「集計」をご参照ください。