全部產品
Search
文件中心

Tablestore:生命週期管理

更新時間:Jun 03, 2026

資料生命週期(Time To Live,簡稱 TTL)是多元索引的一個屬性,用於控制資料的儲存時間。多元索引會自動清理超過儲存時間的資料,減少儲存空間佔用,降低儲存成本。

注意事項

使用生命週期管理功能,必須禁用資料表的 UpdateRow 更新寫入操作。 原因如下:資料表 TTL 在屬性列層級生效,而多元索引 TTL 在整行層級生效。如果存在 UpdateRow 寫入操作,清理資料表時可能出現部分欄位值已刪除、但多元索引中整行資料未刪除的情況,導致兩者資料不一致。如果業務需要更新資料,改用 PutRow 覆蓋寫入操作。

  • 使用生命週期管理功能,必須禁用資料表的 UpdateRow 更新寫入操作,避免一些語義上的問題:

    由於資料表 TTL 是屬性列層級生效的,而多元索引 TTL 是整行生效的,如果存在 UpdateRow 寫入操作,當系統清理資料表中資料時,資料表中部分欄位值已刪除而部分欄位值未刪除,但是多元索引中整行資料均未刪除,則會造成資料表和多元索引中的資料不一致。

    如果業務有 UpdateRow 更新寫入操作,請查看是否能改為 PutRow 覆蓋寫入操作。

  • 多元索引的 TTL 取值範圍為 -1 或 int32 的正整數(單位為秒),其中 -1 表示永久儲存,int32 最大值換算為年大約為 68 年。

  • 多元索引的 TTL 和資料表的 TTL 是獨立的,多元索引的 TTL 值必須小於或等於資料表的 TTL 值。需要同時調小多元索引 TTL 和資料表 TTL 時,請先調整多元索引 TTL,再調整資料表 TTL。

  • 多元索引每天會自動清理已到期的資料,到期資料的清理粒度為"天"。在下一次清理周期到來前,仍可查詢到已到期但尚未被清理的資料。

  • 更新資料表和多元索引的 TTL 後,系統會在下一次清理周期自動清理存量到期資料。

使用方式

通過控制台或SDK設定多元索引生命週期。使用多元索引生命週期,必須始終保持資料表 UpdateRow 更新寫入操作為禁止狀態。

使用控制台

  1. 禁用資料表 UpdateRow 更新寫入操作。

    1. 在資料表的基本詳情頁簽,單擊修改表屬性

    2. 修改表屬性對話方塊,設定是否允許更新並選中風險提示資訊,然後單擊確定

  2. 設定多元索引生命週期。

    禁用資料表 UpdateRow 更新寫入操作後,可在建立多元索引時指定 TTL,也可為已有多元索引指定 TTL。

    建立多元索引時指定TTL

    1. 在資料表的索引管理頁簽,單擊建立多元索引

    2. 建立索引對話方塊,設定索引名和資料生命週期和 Schema 產生方式。

    3. 開啟進階選項開關後,設定資料生命週期,單擊確定

      資料生命週期設定為-1,表示資料永不到期。

    為已有多元索引指定TTL

    1. 在資料表的索引管理頁簽,單擊目標多元索引操作列的索引詳情

    2. 索引詳情對話方塊,單擊修改,修改資料生命週期,然後單擊修改ttl

      資料生命週期最低為 86400 秒(一天)或設定為 -1 表示永不到期,單位為秒,且多元索引的 TTL 值必須小於或等於資料表的 TTL 值。

  3. 多元索引的 TTL 和資料表的 TTL 是獨立的。如果需要使用資料表 TTL,請為資料表設定 TTL。

    1. 在資料表的基本詳情頁簽中基本資料地區,單擊修改表屬性

    2. 修改表屬性對話方塊,根據需要設定資料生命週期,然後單擊確定

使用SDK

可通過Java SDKGo SDK使用生命週期管理。以下以 Java SDK為例介紹資料生命週期的管理。

  1. 禁用資料表UpdateRow更新寫入操作。

    以下樣本用于禁用資料表的UpdateRow更新寫入操作。

    public static void disableTableUpdate(SyncClient client) {
        UpdateTableRequest updateTableRequest = new UpdateTableRequest("<TABLE_NAME>");
        TableOptions options = new TableOptions();
        // 禁用資料表UpdateRow更新寫入操作,請確保資料表無UpdateRow寫入操作,避免影響業務。
        options.setAllowUpdate(false);
        updateTableRequest.setTableOptionsForUpdate(options);
        client.updateTable(updateTableRequest);
    }
  2. 設定多元索引生命週期。

    禁用資料表UpdateRow更新寫入操作後,您可以在建立多元索引時指定TTL或者為已有多元索引指定TTL。

    建立多元索引時指定TTL

    以下樣本用於建立一個多元索引,多元索引包含Col_Keyword和Col_Long兩列,類型分別設定為字串(String)和整型(Long)。同時指定多元索引生命週期為7天。

    // 請使用5.12.0及以上版本的Java SDK。
    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建立多元索引。
        client.createSearchIndex(createRequest);
    }

    為已有多元索引指定TTL

    以下樣本用於指定已有多元索引的生命週期為7天。

    // 請使用5.12.0及以上版本的Java SDK。
    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);
    }