使用數(shù)據(jù)版本以及數(shù)據(jù)生命周期(TTL)功能,您可以有效的管理數(shù)據(jù),減少數(shù)據(jù)存儲空間,降低存儲成本。
最大版本數(shù)
最大版本數(shù)(Max Versions)表示數(shù)據(jù)表中的屬性列能夠保留數(shù)據(jù)的最大版本個數(shù)。當屬性列中數(shù)據(jù)的版本個數(shù)超過設置的最大版本數(shù)時,系統(tǒng)會自動異步刪除較早版本的數(shù)據(jù)。
當前表格存儲未限制最大版本數(shù)。但是出于性能與易用性考慮,建議控制版本數(shù)在500以內。
創(chuàng)建數(shù)據(jù)表時,如果未設置最大版本數(shù),則系統(tǒng)會使用默認值1,您也可以自定義屬性列的最大版本數(shù)。創(chuàng)建數(shù)據(jù)表后,您可以通過UpdateTable接口修改數(shù)據(jù)表的最大版本數(shù)。
超過最大版本數(shù)的數(shù)據(jù)版本為無效數(shù)據(jù),即使系統(tǒng)還未刪除數(shù)據(jù),用戶已無法讀取對應數(shù)據(jù)。
當調小最大版本數(shù)時,如果數(shù)據(jù)版本個數(shù)超過新設的最大版本數(shù),系統(tǒng)會異步刪除較早版本的數(shù)據(jù)。
當調大最大版本數(shù)時,如果系統(tǒng)還未刪除超過舊的最大版本數(shù)的對應版本數(shù)據(jù),且對應版本數(shù)據(jù)在新設的最大版本數(shù)范圍中,則對應版本的數(shù)據(jù)可以重新讀取。
版本號
為數(shù)據(jù)表配置最大版本數(shù)后,當您每次更新屬性列的值時,表格存儲均會為該值生成一個新版本,版本的值即為版本號(時間戳),單位為毫秒。
在屬性列中寫入數(shù)據(jù)時,如果未設置版本號,則系統(tǒng)會自動生成數(shù)據(jù)的版本號,您也可以自定義數(shù)據(jù)的版本號。 由于版本號的單位為毫秒,在進行TTL比較和有效版本偏差計算時,需要除以1000換算成秒。
當由系統(tǒng)自動生成數(shù)據(jù)的版本號時,系統(tǒng)默認將當前時間的毫秒單位時間戳(從
1970-01-01 00:00:00 UTC
計算起的毫秒數(shù))作為屬性列值的版本號。當自定義數(shù)據(jù)的版本號時,屬性列值的版本號需要為64位的毫秒單位時間戳且在有效版本范圍內。
使用版本號,您可以實現(xiàn)以下功能:
數(shù)據(jù)生命周期(TTL)
版本號可以用于定義數(shù)據(jù)表中屬性列值的生命周期。當屬性列中數(shù)據(jù)的保留時長超過設置的TTL后,系統(tǒng)會自動異步清理對應版本號的數(shù)據(jù)。
例如數(shù)據(jù)的版本號為1468944000000(即
2016-07-20 00:00:00 UTC+8
),如果設置數(shù)據(jù)表的TTL為86400(一天),則該版本號的數(shù)據(jù)會在2016-07-21 00:00:00 UTC+8
過期,系統(tǒng)會自動異步刪除該版本號的數(shù)據(jù)。每行數(shù)據(jù)的版本讀取
讀取行數(shù)據(jù)時,您可以指定每列最多讀取的版本個數(shù)或者讀取的版本號范圍。更多信息,請參見讀取數(shù)據(jù)。
數(shù)據(jù)生命周期
數(shù)據(jù)生命周期是數(shù)據(jù)表的一個屬性,即數(shù)據(jù)的保存時間,單位為秒。當屬性列中數(shù)據(jù)的保留時間超過設置的TTL時,系統(tǒng)會自動異步清理超過該屬性列的數(shù)據(jù)。如果一行中所有屬性列中數(shù)據(jù)的保留時間均超過了TTL,則系統(tǒng)會自動異步清理該行數(shù)據(jù)。
例如數(shù)據(jù)表的TTL設置為86400(一天),在2016-07-21 00:00:00 UTC+8
時,數(shù)據(jù)表中所有版本號小于1468944000000(除以1000換算成秒后即2016-07-20 00:00:00 UTC+8
)的屬性列數(shù)據(jù)均會過期,系統(tǒng)會自動異步清理對應過期數(shù)據(jù)。
創(chuàng)建數(shù)據(jù)表時,如果未設置TTL,則系統(tǒng)會使用默認值-1(表示數(shù)據(jù)永不過期),您也可以自定義TTL。創(chuàng)建數(shù)據(jù)表后,您可以通過UpdateTable接口修改TTL。
數(shù)據(jù)表的TTL和二級索引的TTL是獨立的,且數(shù)據(jù)表的TTL必須大于等于二級索引的TTL。當數(shù)據(jù)表上存在二級索引且要修改數(shù)據(jù)表的TTL時,請根據(jù)實際情況進行操作。
如果待設置的數(shù)據(jù)表的TTL小于其二級索引的TTL,請先使用SDK調用UpdateTable接口將二級索引的TTL修改為不大于目標值,再將數(shù)據(jù)表的TTL修改為目標值。
如果待設置的數(shù)據(jù)表的TTL大于或等于二級索引的TTL,請直接將數(shù)據(jù)表的TTL修改為目標值。
超過TTL的過期數(shù)據(jù)為無效數(shù)據(jù),即使系統(tǒng)還未刪除數(shù)據(jù),用戶已無法讀取對應數(shù)據(jù)。
當調小TTL時,數(shù)據(jù)表中可能會有數(shù)據(jù)過期,系統(tǒng)會異步刪除對應過期數(shù)據(jù)。
當調大TTL時,如果系統(tǒng)還未刪除在舊的TTL之外以前版本的數(shù)據(jù),且對應版本數(shù)據(jù)在新設的TTL中,則對應版本的數(shù)據(jù)可以重新讀取。
有效版本偏差
為了避免寫入數(shù)據(jù)時,自定義的時間戳與當前時間的偏差超過了數(shù)據(jù)表的TTL,導致寫入的數(shù)據(jù)立即過期的問題,您可以設置有效版本偏差。
有效版本偏差(Max Version Offset)是指定的數(shù)據(jù)版本號與系統(tǒng)當前時間偏差的允許最大值,單位為秒。有效版本偏差為正整數(shù),可以大于1970-01-01 00:00:00 UTC
時間到當前時間的秒數(shù)。
為了保證數(shù)據(jù)寫入成功,在寫入數(shù)據(jù)時系統(tǒng)會檢查屬性列數(shù)據(jù)的版本號。屬性列數(shù)據(jù)的有效版本范圍為[max{數(shù)據(jù)寫入時間-有效版本偏差,數(shù)據(jù)寫入時間-數(shù)據(jù)生命周期},數(shù)據(jù)寫入時間+有效版本偏差)
。只有當屬性列數(shù)據(jù)的版本號(單位為毫秒)除以1000換算為秒后在有效版本范圍時,才能成功寫入數(shù)據(jù)。
例如當數(shù)據(jù)表的有效版本偏差為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
)的數(shù)據(jù)。當某一行的某個屬性列數(shù)據(jù)的版本號為1468943999000(換算成秒后即2016-07-19 23:59:59 UTC+8
)時,該行數(shù)據(jù)寫入失敗。
創(chuàng)建數(shù)據(jù)表時,如果未設置有效版本偏差,則系統(tǒng)會使用默認值86400,您也可以自定義數(shù)據(jù)有效版本偏差。創(chuàng)建數(shù)據(jù)表后,您可以通過UpdateTable接口修改有效版本偏差。
使用方式
創(chuàng)建數(shù)據(jù)表時,您可以配置最大版本數(shù)、數(shù)據(jù)生命周期等參數(shù)。您也可以在創(chuàng)建數(shù)據(jù)表后修改數(shù)據(jù)版本、數(shù)據(jù)生命周期等。此處以創(chuàng)建數(shù)據(jù)表后修改相應配置為例介紹。
關于在創(chuàng)建數(shù)據(jù)表時進行數(shù)據(jù)版本或者數(shù)據(jù)生命周期配置的具體操作,請參見數(shù)據(jù)表操作。
使用控制臺
您可以使用控制臺修改表的最大版本數(shù)、數(shù)據(jù)生命周期、有效版本偏差等。
登錄表格存儲控制臺。
在概覽頁面,單擊實例操作列的實例管理。
在實例詳情頁簽的數(shù)據(jù)表列表區(qū)域,單擊數(shù)據(jù)表名稱。
在基本詳情頁簽的基本信息區(qū)域,單擊修改表屬性。
在修改表屬性對話框,根據(jù)下表說明修改相應配置信息。
參數(shù)
描述
數(shù)據(jù)生命周期
數(shù)據(jù)表中數(shù)據(jù)的保存時間。當數(shù)據(jù)的保存時間超過設置的數(shù)據(jù)生命周期時,系統(tǒng)會自動清理超過數(shù)據(jù)生命周期的數(shù)據(jù)。單位為秒。
取值:大于等于86400秒(一天)或-1(數(shù)據(jù)永不過期)。
重要使用索引時,數(shù)據(jù)生命周期必須滿足如下條件中的任意一個。
數(shù)據(jù)表的數(shù)據(jù)生命周期為-1(數(shù)據(jù)永不過期)。
數(shù)據(jù)表的數(shù)據(jù)生命周期不為-1時,數(shù)據(jù)表為禁止更新狀態(tài)。
如果已為數(shù)據(jù)表創(chuàng)建索引,則需要修改是否允許更新為否后,再修改數(shù)據(jù)生命周期。
最大版本數(shù)
數(shù)據(jù)表中的屬性列能夠保留數(shù)據(jù)的最大版本個數(shù)。當屬性列數(shù)據(jù)的版本個數(shù)超過設置的最大版本數(shù)時,系統(tǒng)會自動刪除較早版本的數(shù)據(jù)。
取值必須為非0整數(shù)。
重要使用索引時,最大版本數(shù)必須設置為1。如果已為數(shù)據(jù)表創(chuàng)建索引,則無法修改最大版本數(shù)。
數(shù)據(jù)有效版本偏差
指定的數(shù)據(jù)版本號與系統(tǒng)當前時間偏差的允許最大值,單位為秒。有效版本偏差為正整數(shù),可以大于
1970-01-01 00:00:00
UTC時間到當前時間的秒數(shù)。只有當寫入數(shù)據(jù)所有列的版本號與寫入時時間的差值在數(shù)據(jù)有效版本偏差范圍內,數(shù)據(jù)才能成功寫入。
屬性列的有效版本范圍為
[max{數(shù)據(jù)寫入時間-有效版本偏差,數(shù)據(jù)寫入時間-數(shù)據(jù)生命周期},數(shù)據(jù)寫入時間+有效版本偏差)
。是否允許更新
是否允許通過UpdateRow更新寫入數(shù)據(jù)。默認值為是,表示允許通過UpdateRow更新寫入數(shù)據(jù)。
如果已為數(shù)據(jù)表創(chuàng)建索引,當要修改數(shù)據(jù)生命周期時,您需要先設置是否允許更新為否再進行修改。
重要當要使用多元索引生命周期功能時,您必須設置此參數(shù)為否,即不允許通過UpdateRow更新寫入數(shù)據(jù)。關于多元索引生命周期的更多信息,請參見生命周期管理。
單擊確定。
使用命令行工具CLI
您可以使用命令行工具執(zhí)行如下命令進行配置修改。
執(zhí)行alter
命令修改表的最大版本數(shù)或者數(shù)據(jù)生命周期。更多信息,請參見更新表。
以下示例用于修改mytable數(shù)據(jù)表的數(shù)據(jù)生命周期為86400秒(即1天),最大版本數(shù)為1。
alter -t mytable --ttl 86400 --version 1
使用SDK
您可以使用Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK和PHP SDK更新表的最大版本數(shù)、數(shù)據(jù)生命周期、有效版本偏差等屬性。此處以Java SDK為例介紹更新表的使用。
以下示例用于更新數(shù)據(jù)表的最大版本數(shù)為5、數(shù)據(jù)生命周期為-1且有效版本偏差為86400。
private static void updateTable(SyncClient client) {
//數(shù)據(jù)的過期時間,單位為秒,-1表示數(shù)據(jù)永不過期。
int timeToLive = -1;
//將最大版本數(shù)更新為5。
int maxVersions = 5;
//將有效版本偏差更新為86400。單位為秒。
int maxTimeDeviation=86400;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions,maxTimeDeviation);
//設置表名稱。
UpdateTableRequest request = new UpdateTableRequest("<TABLE_NAME>");
request.setTableOptionsForUpdate(tableOptions);
client.updateTable(request);
}
計費說明
使用數(shù)據(jù)多版本時,會產生基于版本號與各個版本數(shù)據(jù)的額外存儲費用。
配置生命周期管理清理數(shù)據(jù),不會有額外的數(shù)據(jù)清理費用。但開啟生命周期管理功能后,會在各個屬性列增加時間戳作為的版本號數(shù)據(jù),有額外的存儲量產生。
更多信息,請參見數(shù)據(jù)存儲量。
常見問題
修改數(shù)據(jù)表生命周期時報錯[table ttl] must be bigger than or equal search index ttl