全部产品
Search
文档中心

表格存储:生命周期管理

更新时间:Jun 02, 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);
    }