Time to Live (TTL) は、検索インデックスの属性であり、検索インデックス内のデータの保持期間を指定します。検索インデックスの TTL を指定できます。検索インデックス内のデータが指定された TTL を超える期間保持されると、Tablestore は自動的にデータを削除してストレージ容量を解放し、コストを削減します。
前提条件
TableStoreClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。
データテーブルが作成されていること。詳細については、データテーブルを作成する を参照してください。
使用上の注意
検索インデックスの TTL を指定する前に、検索インデックスが作成されたデータテーブルの UpdateRow 操作を無効にする必要があります。そうしないと、セマンティックの問題が発生する可能性があります。
指定されたデータテーブルの TTL は属性列に適用され、指定された検索インデックスの TTL は行全体に適用されます。UpdateRow 操作を呼び出してデータテーブルを更新すると、Tablestore がデータテーブル内のデータをクリアするときに、一部のフィールドの値は削除され、一部のフィールドの値はデータテーブルに保持されます。ただし、データテーブルに対して作成された検索インデックス内の行全体は削除されません。その結果、データテーブルと検索インデックスのデータに不整合が生じます。
データテーブルを更新する必要がある場合は、UpdateRow 操作の代わりに PutRow 操作を呼び出すことができるかどうかを確認してください。
検索インデックスの TTL は -1 または正の int32 に設定できます。単位:秒。-1 の値は、検索インデックス内のデータが期限切れにならないことを示します。int32 の最大値は約 68 年に相当します。
検索インデックスの TTL は、検索インデックスが作成されたデータテーブルの TTL とは独立しており、データテーブルの TTL 以下である必要があります。検索インデックスと、検索インデックスが作成されたデータテーブルの TTL を短縮する必要がある場合は、データテーブルの TTL を変更する前に、検索インデックスの TTL を変更する必要があります。
Tablestore は、毎日、検索インデックスから期限切れのデータを自動的に削除します。期限切れのデータが削除されるまでは、検索インデックス内の期限切れのデータをクエリできます。Tablestore は、次のサイクルで期限切れのデータを自動的に削除します。
データテーブルと検索インデックスの TTL を変更した後、Tablestore は次のサイクルでデータテーブルと検索インデックスから履歴の期限切れデータを自動的に削除します。
手順
データテーブルの UpdateRow 操作を禁止します。
次のサンプルコードは、データテーブルの UpdateRow 操作を禁止する方法の例を示しています。
public static void disableTableUpdate(SyncClient client) { UpdateTableRequest updateTableRequest = new UpdateTableRequest("<TABLE_NAME>"); TableOptions options = new TableOptions(); // ビジネスへの影響を防ぐために、データテーブルの UpdateRow 操作を禁止します。 options.setAllowUpdate(false); updateTableRequest.setTableOptionsForUpdate(options); client.updateTable(updateTableRequest); }
検索インデックスの TTL を指定します。
データテーブルの UpdateRow 操作が禁止された後、既存の検索インデックスの TTL を指定するか、検索インデックスを作成するときに TTL を指定できます。
検索インデックスの作成時に TTL を指定する
次のサンプルコードは、TTL を指定して検索インデックスを作成する方法の例を示しています。この例では、検索インデックスは、String 型の Col_Keyword 列と Long 型の Col_Long 列で構成されています。検索インデックスの TTL は 7 日です。
// Tablestore SDK for Java V5.12.0 以降を使用してください。 public static void createIndexWithTTL(SyncClient client) { int days = 7; CreateSearchIndexRequest createRequest = new CreateSearchIndexRequest(); // データテーブルの名前を指定します。 createRequest.setTableName("<TABLE_NAME>"); // 検索インデックスの名前を指定します。 createRequest.setIndexName("<SEARCH_INDEX_NAME>"); IndexSchema indexSchema = new IndexSchema(); indexSchema.setFieldSchemas(Arrays.asList( // フィールドの名前と型を指定します。 new FieldSchema("Col_Keyword", FieldType.KEYWORD), new FieldSchema("Col_Long", FieldType.LONG))); createRequest.setIndexSchema(indexSchema); // 検索インデックスの TTL を指定します。 createRequest.setTimeToLiveInDays(days); // 検索インデックスを作成します。 client.createSearchIndex(createRequest); }
既存の検索インデックスの TTL を変更する
次のサンプルコードは、既存の検索インデックスの TTL を 7 日間に設定する方法の例を示しています。
// Tablestore SDK for Java V5.12.0 以降を使用してください。 public static void updateIndexWithTTL(SyncClient client) { int days = 7; UpdateSearchIndexRequest updateSearchIndexRequest = new UpdateSearchIndexRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>"); // 検索インデックスの TTL を変更します。 updateSearchIndexRequest.setTimeToLiveInDays(days); client.updateSearchIndex(updateSearchIndexRequest); }
データテーブルの TTL は、データテーブルに対して作成された検索インデックスの TTL とは独立しています。データテーブルの TTL を指定できます。
次のサンプルコードは、データテーブルの TTL を 7 日間に設定する方法の例を示しています。
public static void updateTableTTL(SyncClient client) { int days = 7; UpdateTableRequest updateTableRequest = new UpdateTableRequest("<TABLE_NAME>"); TableOptions options = new TableOptions(); options.setTimeToLiveInDays(days); updateTableRequest.setTableOptionsForUpdate(options); client.updateTable(updateTableRequest); }
FAQ
参考資料
ListSearchIndex 操作を呼び出して、データテーブルに対して作成されたすべての検索インデックスをクエリできます。詳細については、検索インデックスを一覧表示する を参照してください。
DescribeSearchIndex 操作を呼び出して、検索インデックスの説明をクエリできます。たとえば、フィールド情報と検索インデックスの構成をクエリできます。詳細については、検索インデックスの説明をクエリする を参照してください。
検索インデックスのスキーマを動的に変更して、検索インデックスにインデックス列を追加、更新、または削除できます。詳細については、検索インデックスのスキーマを動的に変更する を参照してください。
不要になった検索インデックスを削除できます。詳細については、検索インデックスを削除する を参照してください。