使用数据版本以及数据生命周期(TTL)功能,您可以有效的管理数据,减少数据存储空间,降低存储成本。
最大版本数
最大版本数(Max Versions)表示数据表中的属性列能够保留数据的最大版本个数。当属性列中数据的版本个数超过设置的最大版本数时,系统会自动异步删除较早版本的数据。
当前表格存储未限制最大版本数。但是出于性能与易用性考虑,建议控制版本数在500以内。
创建数据表时,如果未设置最大版本数,则系统会使用默认值1,您也可以自定义属性列的最大版本数。创建数据表后,您可以通过UpdateTable接口修改数据表的最大版本数。
超过最大版本数的数据版本为无效数据,即使系统还未删除数据,用户已无法读取对应数据。
当调小最大版本数时,如果数据版本个数超过新设的最大版本数,系统会异步删除较早版本的数据。
当调大最大版本数时,如果系统还未删除超过旧的最大版本数的对应版本数据,且对应版本数据在新设的最大版本数范围中,则对应版本的数据可以重新读取。
版本号
为数据表配置最大版本数后,当您每次更新属性列的值时,表格存储均会为该值生成一个新版本,版本的值即为版本号(时间戳),单位为毫秒。
在属性列中写入数据时,如果未设置版本号,则系统会自动生成数据的版本号,您也可以自定义数据的版本号。 由于版本号的单位为毫秒,在进行TTL比较和有效版本偏差计算时,需要除以1000换算成秒。
当由系统自动生成数据的版本号时,系统默认将当前时间的毫秒单位时间戳(从
1970-01-01 00:00:00 UTC
计算起的毫秒数)作为属性列值的版本号。当自定义数据的版本号时,属性列值的版本号需要为64位的毫秒单位时间戳且在有效版本范围内。
使用版本号,您可以实现以下功能:
数据生命周期(TTL)
版本号可以用于定义数据表中属性列值的生命周期。当属性列中数据的保留时长超过设置的TTL后,系统会自动异步清理对应版本号的数据。
例如数据的版本号为1468944000000(即
2016-07-20 00:00:00 UTC+8
),如果设置数据表的TTL为86400(一天),则该版本号的数据会在2016-07-21 00:00:00 UTC+8
过期,系统会自动异步删除该版本号的数据。每行数据的版本读取
读取行数据时,您可以指定每列最多读取的版本个数或者读取的版本号范围。更多信息,请参见读取数据。
数据生命周期
数据生命周期是数据表的一个属性,即数据的保存时间,单位为秒。当属性列中数据的保留时间超过设置的TTL时,系统会自动异步清理超过该属性列的数据。如果一行中所有属性列中数据的保留时间均超过了TTL,则系统会自动异步清理该行数据。
例如数据表的TTL设置为86400(一天),在2016-07-21 00:00:00 UTC+8
时,数据表中所有版本号小于1468944000000(除以1000换算成秒后即2016-07-20 00:00:00 UTC+8
)的属性列数据均会过期,系统会自动异步清理对应过期数据。
创建数据表时,如果未设置TTL,则系统会使用默认值-1(表示数据永不过期),您也可以自定义TTL。创建数据表后,您可以通过UpdateTable接口修改TTL。
数据表的TTL和二级索引的TTL是独立的,且数据表的TTL必须大于等于二级索引的TTL。当数据表上存在二级索引且要修改数据表的TTL时,请根据实际情况进行操作。
如果待设置的数据表的TTL小于其二级索引的TTL,请先使用SDK调用UpdateTable接口将二级索引的TTL修改为不大于目标值,再将数据表的TTL修改为目标值。
如果待设置的数据表的TTL大于或等于二级索引的TTL,请直接将数据表的TTL修改为目标值。
超过TTL的过期数据为无效数据,即使系统还未删除数据,用户已无法读取对应数据。
当调小TTL时,数据表中可能会有数据过期,系统会异步删除对应过期数据。
当调大TTL时,如果系统还未删除在旧的TTL之外以前版本的数据,且对应版本数据在新设的TTL中,则对应版本的数据可以重新读取。
有效版本偏差
为了避免写入数据时,自定义的时间戳与当前时间的偏差超过了数据表的TTL,导致写入的数据立即过期的问题,您可以设置有效版本偏差。
有效版本偏差(Max Version Offset)是指定的数据版本号与系统当前时间偏差的允许最大值,单位为秒。有效版本偏差为正整数,可以大于1970-01-01 00:00:00 UTC
时间到当前时间的秒数。
为了保证数据写入成功,在写入数据时系统会检查属性列数据的版本号。属性列数据的有效版本范围为[max{数据写入时间-有效版本偏差,数据写入时间-数据生命周期},数据写入时间+有效版本偏差)
。只有当属性列数据的版本号(单位为毫秒)除以1000换算为秒后在有效版本范围时,才能成功写入数据。
例如当数据表的有效版本偏差为86400(一天),在2016-07-21 00:00:00 UTC+8
时,只能写入版本号大于1468944000000(换算成秒后即2016-07-20 00:00:00 UTC+8
)并且小于1469116800000(换算成秒后即2016-07-22 00:00:00 UTC+8
)的数据。当某一行的某个属性列数据的版本号为1468943999000(换算成秒后即2016-07-19 23:59:59 UTC+8
)时,该行数据写入失败。
创建数据表时,如果未设置有效版本偏差,则系统会使用默认值86400,您也可以自定义数据有效版本偏差。创建数据表后,您可以通过UpdateTable接口修改有效版本偏差。
使用方式
创建数据表时,您可以配置最大版本数、数据生命周期等参数。您也可以在创建数据表后修改数据版本、数据生命周期等。此处以创建数据表后修改相应配置为例介绍。
关于在创建数据表时进行数据版本或者数据生命周期配置的具体操作,请参见数据表操作。
使用控制台
使用命令行工具CLI
使用SDK
计费说明
使用数据多版本时,会产生基于版本号与各个版本数据的额外存储费用。
配置生命周期管理清理数据,不会有额外的数据清理费用。但开启生命周期管理功能后,会在各个属性列增加时间戳作为的版本号数据,有额外的存储量产生。
更多信息,请参见数据存储量。
常见问题
修改数据表生命周期时报错[table ttl] must be bigger than or equal search index ttl