Tablestore SDK for Python を使用して、検索インデックスの Time to Live (TTL) を設定します。Tablestore は、保持期間が終了するとインデックスデータを自動的に削除します。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化していること。
テーブルが存在し、最大データバージョン数が
1に設定されていること。
注意事項
検索インデックス TTL を管理する前に、テーブルの
UpdateRow操作を無効にして、テーブルと検索インデックス間のデータ不整合を防いでください。テーブルの TTL は個々の属性列に適用されるのに対し、検索インデックスの TTL は行全体に適用されます。UpdateRowを使用すると、TTL クリーンアップによってテーブルの一部の列のみが削除され、検索インデックス内では行全体が保持される場合があります。データを更新する場合は、PutRowを使用して行全体を上書きしてください。検索インデックス TTL は秒単位で、
-1または正の 32 ビット整数を指定できます。-1を指定すると、データは永続的に保存されます。正の値の最大値は、約 68 年の保持期間に相当します。検索インデックス TTL とテーブル TTL は独立して設定しますが、検索インデックス TTL はテーブル TTL 以下である必要があります。目的の検索インデックス TTL が現在のテーブル TTL より大きい場合は、先にテーブル TTL を増やしてください。両方の TTL を減らす場合は、先に検索インデックス TTL を減らしてください。
Tablestore は、有効期限が切れた検索インデックスデータを 1 日に 1 回削除します。次回のクリーンアップが完了するまでは、削除されていない期限切れデータがクエリ結果に返される場合があります。テーブル TTL または検索インデックス TTL を更新した後、変更によって有効期限が切れるデータは次回のクリーンアップサイクルで削除されます。
操作手順
ライフサイクル管理は、テーブルの UpdateRow 操作の無効化、検索インデックス TTL の設定、および必要に応じたテーブル TTL の設定からなります。テーブル TTL の設定が常に最後の操作になるとは限りません。前述の TTL 制約に基づいて、手順 2 と手順 3 の順序を決定してください。
-
テーブルの
UpdateRow操作を無効にします。次の例では、
example_tableのUpdateRow操作を無効にします。table_options = TableOptions( time_to_live=None, max_version=None, max_time_deviation=None, allow_update=False, ) client.update_table( "example_table", table_options=table_options, ) -
検索インデックス TTL を設定します。
検索インデックスが既に存在するかどうかに応じて、いずれかのオプションを選択してください。
新規インデックス
検索インデックスの作成時に 7 日間の TTL を設定します。
fields = [ FieldSchema("category", FieldType.KEYWORD, index=True), FieldSchema("price", FieldType.LONG, index=True), ] index_meta = SearchIndexMeta( fields, time_to_live=7 * 24 * 60 * 60, ) client.create_search_index( "example_table", "example_index", index_meta, )既存インデックス
既存の検索インデックスの TTL を 7 日間に更新します。
index_meta = SearchIndexMeta( fields=None, time_to_live=7 * 24 * 60 * 60, ) client.update_search_index( "example_table", "example_index", index_meta, ) -
必要に応じてテーブル TTL を設定します。
次の例では、
example_tableの TTL を 7 日間に設定します。前述の制約に基づいて、検索インデックス TTL の設定前または設定後にこの操作を実行してください。table_options = TableOptions( time_to_live=7 * 24 * 60 * 60, max_version=None, max_time_deviation=None, allow_update=False, ) client.update_table( "example_table", table_options=table_options, )
設定後、テーブル情報をクエリし、検索インデックス情報をクエリして、両方の TTL を確認します。