新しいビジネス要件を満たすため、またはパフォーマンスを最適化するために、検索インデックスのインデックス列を追加、更新、または削除したり、検索インデックスのルーティングキーと事前ソート方法を変更したりする必要がある場合があります。この場合、検索インデックスのスキーマを動的に変更できます。検索インデックスのスキーマを動的に変更するには、ソースインデックスのスキーマを変更してカナリアインデックスを作成し、すべてのテーブルデータがカナリアインデックスに同期されるまで待機し、カナリアインデックスに割り当てられるクエリトラフィックの重みを指定してA/Bテストを実行し、ソースインデックスとカナリアインデックスのスキーマを切り替え、カナリアインデックスを削除する必要があります。
機能概要
Tablestore のデータテーブルはスキーマレスです。ただし、検索インデックスには厳密なスキーマがあります。検索インデックスを作成するときは、検索インデックスに追加する列を指定する必要があります。その後、検索インデックスを使用してデータをクエリするときに、これらの列をクエリできます。ビジネスの変化に適応し、パフォーマンスを最適化するには、検索インデックスのスキーマを頻繁に変更する必要があります。検索インデックスのスキーマを変更するときは、次の操作を実行できます。
インデックス列の追加: ビジネスでクエリにさらに列が必要な場合は、インデックス列を追加できます。
インデックス列の更新: インデックス列のデータ型、仮想列、配列、アナライザー、および日付フィールドの形式設定を変更できます。
インデックス列の削除: クエリする必要がなくなったインデックス列を削除できます。
ルーティングキーの変更: 適切なルーティングキーを指定して、読み取りワークロードを削減し、クエリ効率を向上させることができます。
事前ソート方法の変更: 事前ソート方法がクエリ結果のソートに使用するメソッドと同じである場合、クエリ条件を満たす行は効率的な方法で返されます。事前ソート方法を変更して、データクエリの速度を向上させることができます。
フローチャート
次のフローチャートは、スキーマを動的に変更する方法を示しています。この手順はビジネスに影響を与えません。アプリケーションコードを変更する必要はありません。
次の表は、検索インデックスのスキーマを変更するために必要な手順を示しています。
手順 | 操作 | 説明 |
1 | カナリアインデックスの作成 | 検索インデックスのスキーマを変更して、検索インデックスのカナリアインデックスを作成します。 |
2 | インデックスの同期進度の確認 | データテーブルのデータはカナリアインデックスに自動的に同期されます。カナリアインデックスの同期進度がソースインデックスの同期進度と同じになるまで、データテーブルの既存データと増分データがカナリアインデックスに同期されるのを待ちます。 |
3 | A/Bテストの重みの指定 | A/Bテストを使用すると、比率に基づいてソースインデックスとカナリアインデックスにトラフィックを割り当て、スキーマの変更の効果を確認できます。 A/Bテストを使用して、トラフィックを徐々にカナリアインデックスに切り替え、すべてのトラフィックがカナリアインデックスに切り替わるまで待ちます。 |
4 | インデックススキーマの切り替え | すべてのクエリトラフィックがカナリアインデックスに切り替えられたら、ソースインデックスとカナリアインデックスのスキーマを切り替えます。 スキーマを切り替えると、ソースインデックスの名前が新しいスキーマに関連付けられます。カナリアインデックスの名前は古いスキーマに関連付けられます。すべてのトラフィックは、新しいスキーマに関連付けられた名前を持つソースインデックスをクエリするように切り替えられます。 |
5 | カナリアインデックスの削除 | スキーマを切り替え、新しいスキーマが正しいことを確認したら、カナリアインデックスを削除できます。カナリアインデックスを削除する前に、1日など、一定期間待つことをお勧めします。 |
手順
インデックス タブに移動します。
Tablestoreコンソールにログオンします。
上部のナビゲーションバーで、リージョンとリソースグループを選択します。
概要インスタンスの管理アクションページで、管理するインスタンスの名前をクリックするか、インスタンスの列にあるをクリックします。
インスタンスの詳細タブのテーブルインスタンスの詳細インデックスアクションセクションで、インデックスを管理するデータテーブルの名前をクリックします。テーブルの管理ページで、タブをクリックします。データテーブルの列にあるをクリックすることもできます。
ソースインデックスに基づいてカナリアインデックスを作成します。
インデックススキーマの変更アクションタブで、検索インデックスの列にあるをクリックします。
再インデックス ダイアログ ボックスで、ビジネス要件に基づいてインデックス フィールドを追加、変更、または削除します。
ルーティングキーまたは検索インデックスの事前ソート方法を変更する場合は、詳細設定 をオンにしてパラメーターを設定します。次の表にパラメーターを示します。
パラメータ
説明
ルーティングキー
カスタムルーティングフィールド。プライマリキー列の1つ以上をルーティングフィールドとして指定できます。
データがインデックスに書き込まれると、データが分散される場所はルーティングキーの値に基づいて決定されます。ルーティングキーの値は、ルーティングフィールドの値に基づいて計算されます。同じルーティングキー値を共有するデータレコードは、同じパーティションに分散されます。詳細については、「ルーティングフィールドの使用方法」を参照してください。
事前ソート
検索インデックスのデータをソートするために使用される事前ソート方法。検索インデックスを使用してデータをクエリすると、事前ソート方法によって、クエリ結果が返されるデフォルトの順序が決まります。詳細については、「ソートとページングの実行」を参照してください。
検索インデックス内のデータを主キーに基づいて並べ替える場合は、このパラメーターをデフォルトに設定します。
検索インデックス内のデータをフィールド値または主キー列の組み合わせに基づいてソートする場合は、このパラメーターをカスタムに設定し、以下の手順を実行して事前ソート方法を指定します。
主キーの事前ソート または フィールドの事前ソート を選択し、追加 をクリックします。
フィールド名を指定し、検索インデックスのデータを昇順または降順でソートするかどうかを指定します。
重要フィールド名を指定する必要があるのは、フィールドの事前ソート を選択した場合のみです。
事前ソートにカスタムを選択した場合は、ビジネス要件に基づいて、プライマリキーの事前ソートとフィールドの事前ソートを同時に選択できます。
OK をクリックします。
インデックス比較 メッセージで、ソースインデックスとカナリーインデックス間のルーティングキー、事前ソート方法、スキーマの比較を表示します。情報が正しいことを確認したら、OK をクリックします。
インデックスの同期情報を表示します。
ソースインデックスの前にあるアイコンをクリックするか、ソースインデックスの名前をクリックします。
ソースインデックスのカナリアインデックスが表示されます。
カナリアインデックスのグレースケール指数を使用するアクション列にあるをクリックします。
重要カナリアインデックスには、既存データの同期と増分データの同期の段階が必要です。
データ同期が完了する前に、アクション列のグレースケールインデックスを使用にポインターを移動すると、はい、ただし操作によってセキュリティリスクが発生する可能性がありますというメッセージが表示されます。
データ同期が完了した後、アクション列のグレイインデックスを使用にポインターを移動すると、はい。操作は安全ですというメッセージが表示されます。グレイインデックスを使用ダイアログボックスに進むことができます。
グレイインデックスの使用 ダイアログボックスで、インデックスの同期情報を表示します。
同期が完了したら、重みを指定してA/Bテストを実行します。
A/Bテストを使用すると、比率に基づいてソースインデックスとカナリアインデックスにトラフィックを割り当て、スキーマの変更の効果を確認できます。すべてのトラフィックがカナリアインデックスに切り替えられた場合にのみ、後続の操作を実行できます。
操作グレースケール指数を使用する重みを設定ダイアログボックスのセクションで、スライダーをドラッグしてソースインデックスとカナリアインデックスの重みを調整し、をクリックします。
重みの設定 メッセージで、重みデータとスキーマの比較情報を確認します。
情報が正しいことを確認したら、重みを設定をクリックします。
表示されるメッセージで、OK をクリックします。
すべてのクエリトラフィックがカナリアインデックスに切り替えられたら、ソースインデックスとカナリアインデックスのスキーマを切り替えます。
スキーマを切り替えると、ソースインデックスの名前が新しいスキーマに関連付けられます。カナリアインデックスの名前は古いスキーマに関連付けられます。すべてのトラフィックは、新しいスキーマに関連付けられた名前を持つソースインデックスをクエリするように切り替えられます。
操作 セクションの グレースケール指数を使用 ダイアログ ボックスで、指数の切り替え をクリックします。
インデックスの切り替え メッセージで、ソース インデックスとカナリア インデックスのルーティング キー、事前ソート方法、スキーマの比較を表示します。情報が正しいことを確認したら、切り替えの確認 をクリックします。
スキーマを切り替え、新しいスキーマが正しいことを確認したら、ソースインデックスを削除します。ソースインデックスを削除する前に、1日など、一定期間待つことをお勧めします。
グレースケール指数を使用 ダイアログボックスで、カナリアリリースの削除 をクリックします。
カナリアリリースの削除 ダイアログボックスで、削除するカナリアインデックスの情報が正しいことを確認します。表示されるテキストボックスに、
I confirm that the new index data is synchronized and a canary release is completed for a specific period of time.
と入力します。はいをクリックします。
セキュリティ
誤った操作の影響を制限するために、Tablestoreはロールバックメカニズムと切り替えノートを提供して、スキーマの変更によって発生するリスクを最小限に抑えます。
ロールバックメカニズム
検索インデックスのスキーマを動的に変更すると、変更をロールバックできます。
カナリアインデックスを作成した後、カナリアインデックスのスキーマが期待どおりでない場合は、カナリアインデックスを削除して新しいインデックスを作成できます。
A/Bテストを実行するときは、重みを指定してトラフィックを徐々にカナリアインデックスに切り替えることができます。このプロセスで、問題が発生した場合は、いつでも重みをリセットしてトラフィックをソースインデックスに戻すことができます。
ソースインデックスとカナリーインデックスの間でスキーマを切り替えた後、問題が発生した場合、いつでも切り替えをキャンセルしてスキーマをロールバックできます。 インデックスの切り替えは、切り替えのキャンセルの逆です。
切り替えノート
カナリアインデックスの同期進度がソースインデックスの同期進度よりも遅いときにカナリアインデックスにトラフィックを切り替えると、クエリするデータが最新でない場合があります。この場合、Tablestoreは、ソースインデックスとカナリアインデックスの同期ステータスと最後の同期時間に基づいて、切り替えを実行できるかどうかを判断します。
以下の状況が存在する場合、Tablestoreはスイッチオーバーを実行できると判断します:
ソースインデックスはフルデータ同期段階にあります。カナリアインデックスは、フルデータ同期または増分データ同期段階にあります。カナリアインデックスの同期進度はソースインデックスの同期進度と同じです。
ソースインデックスとカナリアインデックスは増分データ同期段階にあります。ソースインデックスの最後の同期時間は、カナリアインデックスの最後の同期時間よりも最大60秒早くなっています。
課金
カナリアインデックスの構築とデータの書き込みには料金はかかりません。ソースインデックスとカナリアインデックスのストレージ使用量と予約済み読み取りキャパシティユニット(CU)に対して課金されます。詳細については、「検索インデックスの課金対象項目」を参照してください。
参考資料
検索インデックスのスキーマを変更することで、新しいフィールドと新しいフィールドタイプのデータをクエリできます。検索インデックスを作成し、仮想列機能を使用することもできます。テーブルスキーマを変更する必要はありません。詳細については、「仮想列」を参照してください。
次の機能を使用して、ビジネス要件に基づいてデータをクエリできます: すべて一致クエリ、一致クエリ、フレーズ一致クエリ、用語クエリ、用語クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ネストされたクエリ、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリ、存在クエリ、折りたたみ (個別)、トークン化ベースのワイルドカードクエリ、仮想列。
検索インデックスのSQLクエリ機能を使用して、検索インデックス内のさまざまなタイプのデータを効率的にクエリできます。詳細については、「SQLクエリ」、「検索インデックスのマッピングテーブルの作成」、「データのクエリ」、「全文検索」、「検索インデックスの配列タイプ」、「検索インデックスでサポートされているNESTED」、「検索インデックスの仮想列」を参照してください。
検索インデックスの集計機能を使用して、次の操作を実行できます。行の最小値、最大値、合計、平均値、カウント、個別カウント、パーセンタイル統計の取得、フィールド値、範囲、地理的位置、フィルター、ヒストグラム、または日付ヒストグラムによる結果のグループ化、ネストされたクエリの実行、各グループの集計操作の結果からの行のクエリ。詳細については、「集計」を参照してください。