使用 Python SDK 配置多元索引的数据生命周期(Time To Live,TTL),Tablestore 会自动清理超过保存期限的索引数据。
前提条件
安装Tablestore Python SDK并初始化客户端。
已创建待配置的数据表,并将最大版本数设置为
1。
注意事项
使用多元索引生命周期管理功能前,必须禁止数据表通过
UpdateRow更新数据,以避免数据表与多元索引的数据不一致。数据表 TTL 按属性列生效,多元索引 TTL 按整行生效;使用UpdateRow更新数据时,系统清理过期数据后,数据表可能只保留部分属性列,而多元索引仍保留整行数据。如需更新数据,请改用PutRow覆盖整行数据。多元索引 TTL 的单位为秒,取值为
-1或 int32 范围内的正整数。-1表示永久存储,正整数最大值对应的保存时间约为 68 年。多元索引 TTL 与数据表 TTL 独立配置,但多元索引 TTL 必须小于或等于数据表 TTL。如果多元索引的目标 TTL 大于当前数据表 TTL,先增大数据表 TTL;如果同时减小二者,先减小多元索引 TTL。
Tablestore 每天自动清理多元索引中的过期数据。在下一次清理完成前,查询仍可能返回已过期但尚未清理的数据。更新数据表或多元索引 TTL 后,Tablestore 会在下一次清理周期自动清理因 TTL 变更而过期的存量数据。
操作步骤
生命周期配置包括禁止数据表通过 UpdateRow 更新数据、设置多元索引生命周期,以及按需设置数据表生命周期。数据表生命周期不是固定的最后一步,请根据上述 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, ) -
设置多元索引生命周期。
根据多元索引是否已创建,选择相应的设置方式。
新建索引
创建多元索引时,将生命周期设置为 7 天。
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, )已有索引
将已有多元索引的生命周期更新为 7 天。
index_meta = SearchIndexMeta( fields=None, time_to_live=7 * 24 * 60 * 60, ) client.update_search_index( "example_table", "example_index", index_meta, ) -
按需设置数据表生命周期。
以下示例将
example_table的生命周期设置为 7 天。请根据上述 TTL 约束,在设置多元索引生命周期之前或之后执行此操作。table_options = TableOptions( time_to_live=7 * 24 * 60 * 60, max_version=None, max_time_deviation=None, ) client.update_table( "example_table", table_options=table_options, )