すべてのプロダクト
Search
ドキュメントセンター

Tablestore:検索インデックスのTTLを指定する

最終更新日:Dec 28, 2024

Time to Live (TTL) は、検索インデックスの属性であり、検索インデックス内のデータの保存期間を指定します。検索インデックスのTTLを指定できます。検索インデックス内のデータが指定されたTTLを超えて保持されると、Tablestoreは自動的にデータを削除してストレージスペースを解放し、コストを削減します。

使用上の注意

  • 検索インデックスのTTLを指定する前に、検索インデックスが作成されたデータテーブルのUpdateRow操作を無効にする必要があります。そうしないと、セマンティックの問題が発生する可能性があります。

    指定されたデータテーブルのTTLは属性列に適用され、指定された検索インデックスのTTLは行全体に適用されます。UpdateRow操作を呼び出してデータテーブルを更新すると、Tablestoreがデータテーブル内のデータをクリアするときに、一部のフィールドの値が削除され、一部のフィールドの値がデータテーブルに保持されます。ただし、データテーブル用に作成された検索インデックス内の行全体は削除されません。その結果、データテーブルと検索インデックスのデータに不整合が生じます。

    データテーブルを更新する必要がある場合は、UpdateRow操作の代わりにPutRow操作を呼び出すことができるかどうかを確認してください。

  • 検索インデックスのTTLは、-1または正のint32に設定できます。単位:秒。-1の値は、検索インデックス内のデータが期限切れにならないことを示します。int32の最大値は約68年に相当します。

  • 検索インデックスのTTLは、検索インデックスが作成されたデータテーブルのTTLとは独立しており、データテーブルのTTL以下である必要があります。検索インデックスと、検索インデックスが作成されたデータテーブルのTTLを短縮する必要がある場合は、データテーブルのTTLを変更する前に、検索インデックスのTTLを変更する必要があります。

  • Tablestoreは毎日、検索インデックスから期限切れのデータを自動的に削除します。期限切れのデータが削除されるまでは、検索インデックスで期限切れのデータをクエリできます。Tablestoreは、次のサイクルで期限切れのデータを自動的に削除します。

  • データテーブルと検索インデックスのTTLを変更した後、Tablestoreは次のサイクルで、データテーブルと検索インデックスから履歴の期限切れデータを自動的に削除します。

手順

TablestoreコンソールまたはTablestore SDKを使用して、検索インデックスのTTLを指定できます。検索インデックスのTTL機能を使用するには、検索インデックスが作成されたデータテーブルのUpdateRow操作を禁止する必要があります。

Tablestoreコンソールの使用

  1. データテーブルのUpdateRow操作を無効にします。

    1. データテーブルの基本情報タブの基本情報属性の変更セクションで、をクリックします。

    2. 属性の変更ダイアログボックスで、更新を許可いいえに設定し、リスクメッセージの横にあるチェックボックスをオンにして、OKをクリックします。fig_tableupdate

  2. 検索インデックスのTTLを指定します。

    データテーブルのUpdateRow操作が禁止された後、既存の検索インデックスのTTLを指定するか、検索インデックスの作成時にTTLを指定できます。

    検索インデックスの作成時にTTLを指定する

    1. データテーブルのインデックスタブで、検索インデックスの作成をクリックします。

    2. インデックスの作成ダイアログボックスで、インデックス名、有効期限、およびスキーマ生成タイプの各パラメータを設定します。

    3. 詳細設定をオンにし、有効期限パラメータを設定して、OKをクリックします。

      image

    既存の検索インデックスのTTLを指定する

    1. データテーブルのインデックスタブで、TTLを指定する検索インデックスを見つけ、アクション列のインデックスの詳細をクリックします。fig_indexdetailsenter

    2. インデックスの詳細ダイアログボックスで、変更をクリックし、有効期限パラメータの値を変更して、変更をクリックします。

      image

  3. 検索インデックスのTTLは、検索インデックスが作成されたデータテーブルのTTLとは独立しています。データテーブルのTTLを使用する場合は、データテーブルのTTLを設定します。

    1. データテーブルの説明セクションの基本情報タブで、属性の変更をクリックします。

    2. 属性の変更ダイアログボックスで、ビジネス要件に基づいて有効期限パラメータを設定し、OKをクリックします。fig_ttltablemodify

Tablestore SDKの使用

Tablestore SDK for JavaまたはTablestore SDK for Goを使用して、検索インデックスのTTLを指定できます。この例では、Tablestore SDK for Javaを使用します。

  1. データテーブルの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);
    }
  2. 検索インデックスの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);
    }
  3. データテーブルの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);
    }