すべてのプロダクト
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 は次のサイクルでデータテーブルと検索インデックスから履歴の期限切れデータを自動的に削除します。

手順

  1. データテーブルの UpdateRow 操作を禁止します。

    次のサンプルコードは、データテーブルの UpdateRow 操作を禁止する方法の例を示しています。

    def disable_table_update(client):
        # ビジネスへの影響を防ぐために、データテーブルの UpdateRow 操作を禁止します。
        table_options = TableOptions(time_to_live=None, max_version=None, max_time_deviation=None, allow_update=False)
        client.update_table('<TABLE_NAME>', table_options, None)
  2. 検索インデックスの TTL を指定します。

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

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

    次のサンプルコードは、TTL を指定して検索インデックスを作成する方法の例を示しています。この例では、検索インデックスは、Keyword タイプの Col_Keyword 列と Long タイプの Col_Long 列で構成されています。検索インデックスの TTL は 7 日間に設定されています。

    def create_index_with_ttl(client):
        # Keyword タイプのフィールド
        field_keyword = FieldSchema('Col_Keyword', FieldType.KEYWORD)
        # Long タイプのフィールド
        field_long = FieldSchema('Col_Long', FieldType.LONG)
        fields = [field_keyword, field_long]
    
        index_meta = SearchIndexMeta(fields, time_to_live=24 * 3600 * 7)
        client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)

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

    次のサンプルコードは、既存の検索インデックスの TTL を 7 日間に設定する方法の例を示しています。

    def update_index_with_ttl(client):
        index_meta = SearchIndexMeta(fields=None, time_to_live=24 * 3600 * 7)
        client.update_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)
  3. 検索インデックスの TTL は、検索インデックスが作成されたデータテーブルの TTL とは独立しています。データテーブルの TTL を指定できます。

    次のサンプルコードは、データテーブルの TTL を 7 日間に設定する方法の例を示しています。

    def update_table_ttl(client):
        table_options = TableOptions(time_to_live=24 * 3600 * 7, max_version=None, max_time_deviation=None)
        client.update_table('<TABLE_NAME>', table_options, None)

FAQ

データテーブルの TTL を変更するときに [table ttl] must be bigger than or equal search index ttl というエラーメッセージが返された場合はどうすればよいですか?

参考資料

  • ListSearchIndex 操作を呼び出して、データテーブル用に作成されたすべての検索インデックスをクエリできます。詳細については、検索インデックスの一覧表示 を参照してください。

  • DescribeSearchIndex 操作を呼び出して、フィールド情報や検索インデックスの設定など、検索インデックスの説明をクエリできます。詳細については、検索インデックスの説明のクエリ を参照してください。

  • 検索インデックスのスキーマを動的に変更して、検索インデックスにインデックス列を追加、更新、または削除できます。詳細については、検索インデックスのスキーマを動的に変更する を参照してください。

  • 不要になった検索インデックスを削除できます。詳細については、検索インデックスの削除 を参照してください。