使用数据版本以及数据生命周期(TTL)功能,您可以有效的管理数据,减少数据存储空间,降低存储成本。

版本号

每次更新属性列的值均会为该值生成一个新版本,版本的值即为版本号(时间戳)。

在属性列中写入数据时,如果未设置版本号,则系统会自动生成数据的版本号,您也可以自定义数据的版本号。 版本号的单位为毫秒,在进行TTL比较和有效版本偏差计算时,需要除以1000换算成秒。

  • 当由系统自动生成数据的版本号时,系统默认将当前时间的毫秒单位时间戳(从1970-01-01 00:00:00 UTC计算起的毫秒数)作为属性列值的版本号。
  • 当自定义数据的版本号时,属性列值的版本号需要为64位的毫秒单位时间戳且在有效版本范围内。
使用版本号,您可以实现以下功能:
  • 数据生命周期(TTL)

    版本号可以用来定义数据表中属性列值的生命周期。当属性列中数据的保留时长超过设置的TTL后,系统会自动清理对应版本号的数据。

    例如数据的版本号为1468944000000(即2016-07-20 00:00:00 UTC),如果设置数据表的TTL为86400(一天),则该版本号的数据会在2016-07-21 00:00:00 UTC过期,系统会自动删除该版本号的数据。

  • 每行数据的版本读取

    读取一行数据时,您可以指定每列最多读取的版本个数或者读取的版本号范围。

最大版本数

最大版本数(Max Versions)表示数据表中的属性列能够保留数据的最大版本个数。当属性列中数据的版本个数超过设置的最大版本数时,系统会自动删除较早版本的数据。

创建数据表时,如果未设置最大版本数,则系统会使用默认值1,您也可以自定义属性列的最大版本数。创建数据表后,您可以通过UpdateTable接口修改数据表的最大版本数。

超过最大版本数的数据版本为无效数据,即使系统还未删除数据,用户已无法读取对应数据。

  • 当调小最大版本数时,如果数据版本个数超过新设的最大版本数,系统会异步删除较早版本的数据。
  • 当调大最大版本数时,如果系统还未删除超过旧的最大版本数的对应版本数据,且对应版本数据在新设的最大版本数范围中,则对应版本的数据可以重新读取。

数据生命周期

数据生命周期是数据表的一个属性,即数据的保存时间,单位为秒。当属性列中数据的保留时间超过设置的TTL时,系统会自动清理超过该属性列的数据。如果一行中所有属性列中数据的保留时间均超过了TTL,则系统会自动清理该行数据。

例如数据表的TTL设置为86400(一天),在2016-07-21 00:00:00 UTC时,数据表中所有版本号小于1468944000000(除以1000换算成秒后即2016-07-20 00:00:00 UTC)的属性列数据均会过期,系统会自动清理对应过期数据。

创建数据表时,如果未设置TTL,则系统会使用默认值-1(表示数据永不过期),您也可以自定义TTL。创建数据表后,您可以通过UpdateTable接口修改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时,只能写入版本号大于1468944000000(换算成秒后即2016-07-20 00:00:00 UTC)并且小于1469116800000(换算成秒后即2016-07-22 00:00:00 UTC)的数据。当某一行的某个属性列数据的版本号为1468943999000(换算成秒后即2016-07-19 23:59:59 UTC)时,该行数据写入失败。

创建数据表时,如果未设置有效版本偏差,则系统会使用默认值86400,您也可以自定义数据有效版本偏差。创建数据表后,您可以通过UpdateTable接口修改有效版本偏差。