Tablestore SDK for Java を使用して、多次元インデックスの生存時間 (TTL) を設定します。Tablestore は、保持期間が過ぎたインデックスデータを自動的に削除します。
前提条件
開始する前に、以下が準備できていることを確認してください。
-
Tablestore SDK for Java 5.12.0 以降がインストールされ、クライアントが初期化されていること
-
データバージョンが最大 1 つの既存のテーブルがあること
注意事項
-
多次元インデックスのライフサイクル管理を使用する前に、テーブルと多次元インデックス間のデータ不整合を防ぐため、テーブルでの
UpdateRow操作を無効にしてください。テーブルの TTL は個々の属性列に適用されますが、多次元インデックスの TTL は行全体に適用されます。
UpdateRowを使用すると、TTL のクリーンアップによってテーブルの一部の列のみが削除され、多次元インデックスには行全体が保持される場合があります。データを更新するには、
PutRowを使用して行全体を上書きしてください。 -
多次元インデックスの TTL は秒単位で測定され、
-1または正の 32 ビット整数を受け入れます。値が-1の場合、データは永続的に保存されます。正の最大値は、約 68 年の保持期間に相当します。 -
多次元インデックスの TTL とテーブルの TTL は独立して設定されますが、多次元インデックスの TTL はテーブルの TTL 以下である必要があります。ターゲットの多次元インデックスの TTL が現在のテーブルの TTL よりも大きい場合は、まずテーブルの TTL を増やしてください。両方の TTL を減らす場合は、まず多次元インデックスの TTL を減らしてください。
-
Tablestore は、期限切れの多次元インデックスデータを 1 日 1 回削除します。次回のクリーンアップが完了するまで、クエリはまだ削除されていない期限切れのデータを返す可能性があります。
-
テーブルまたは多次元インデックスの TTL を更新した後、Tablestore はその変更によって有効期限が切れたデータを、次のクリーンアップサイクル中に削除します。
操作手順
ライフサイクル管理は、テーブルの UpdateRow 更新の無効化、多次元インデックスの TTL の設定、およびオプションでテーブルの TTL の設定で構成されます。テーブルの TTL の設定は、必ずしも最後の操作ではありません。操作の順序は、多次元インデックスの TTL がテーブルの TTL 以下になるようにする必要があります。ターゲットの多次元インデックスの TTL が現在のテーブルの TTL よりも大きい場合は、まずテーブルの TTL を増やしてください。両方の TTL を減らす場合は、まず多次元インデックスの TTL を減らしてください。
-
UpdateRowによるテーブルの更新を無効にします。次の例では、
UpdateRowのexample_tableに対する更新を無効にします。String tableName = "example_table"; UpdateTableRequest request = new UpdateTableRequest(tableName); TableOptions tableOptions = new TableOptions(); tableOptions.setAllowUpdate(false); request.setTableOptionsForUpdate(tableOptions); client.updateTable(request); -
検索インデックスの TTL を設定します。
検索インデックスの有無に応じてオプションを選択します。
新しいインデックス
検索インデックスを作成する際に、7 日間の TTL を設定します。
String tableName = "example_table"; String indexName = "example_index"; IndexSchema indexSchema = new IndexSchema(); indexSchema.setFieldSchemas(Arrays.asList( new FieldSchema("category", FieldType.KEYWORD), new FieldSchema("price", FieldType.LONG))); CreateSearchIndexRequest request = new CreateSearchIndexRequest(); request.setTableName(tableName); request.setIndexName(indexName); request.setIndexSchema(indexSchema); request.setTimeToLiveInDays(7); client.createSearchIndex(request);既存のインデックス
既存の多次元インデックスの TTL を 7 日間に更新します。
String tableName = "example_table"; String indexName = "example_index"; UpdateSearchIndexRequest request = new UpdateSearchIndexRequest(tableName, indexName); request.setTimeToLiveInDays(7); client.updateSearchIndex(request); -
必要に応じて、テーブルの TTL を設定します。
次の例では、
example_tableの TTL を 7 日間に設定します。この操作は、前述の TTL の制約に基づいて、多次元インデックスの TTL を設定する前または後に実行してください。String tableName = "example_table"; UpdateTableRequest request = new UpdateTableRequest(tableName); TableOptions tableOptions = new TableOptions(); tableOptions.setTimeToLiveInDays(7); request.setTableOptionsForUpdate(tableOptions); client.updateTable(request);
設定後、テーブル情報と多次元インデックス情報をクエリして、両方の TTL を確認します。