使用資料版本以及資料生命週期(TTL)功能,您可以有效管理資料,減少資料存放區空間,降低儲存成本。
最大版本數
最大版本數(Max Versions)表示資料表中的屬性列能夠保留資料的最大版本個數。當屬性列中資料的版本個數超過設定的最大版本數時,系統會自動非同步刪除較早版本的資料。
當前Tablestore未限制最大版本數。但是出於效能與易用性考慮,建議控製版本數在500以內。
建立資料表時,如果未設定最大版本數,則系統會使用預設值1,您也可以自訂屬性列的最大版本數。建立資料表後,您可以通過UpdateTable介面修改資料表的最大版本數。
超過最大版本數的資料版本為無效資料,即使系統還未刪除資料,使用者已無法讀取對應資料。
當調小最大版本數時,如果資料版本個數超過新設的最大版本數,系統會非同步刪除較早版本的資料。
當調大最大版本數時,如果系統還未刪除超過舊的最大版本數的對應版本資料,且對應版本資料在新設的最大版本數範圍中,則對應版本的資料可以重新讀取。
版本號碼
為資料表配置最大版本數後,當您每次更新屬性列的值時,Tablestore均會為該值產生一個新版本,版本的值即為版本號碼(時間戳記),單位為毫秒。
在屬性列中寫入資料時,如果未設定版本號碼,則系統會自動產生資料的版本號碼,您也可以自訂資料的版本號碼。 由於版本號碼的單位為毫秒,在進行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