表格存儲(chǔ)對(duì)實(shí)例的數(shù)據(jù)總量按小時(shí)計(jì)費(fèi)。表格存儲(chǔ)以固定的時(shí)間間隔統(tǒng)計(jì)數(shù)據(jù)總量,然后計(jì)算每小時(shí)數(shù)據(jù)總量的平均值。
如下圖所示,表格存儲(chǔ)中實(shí)例的數(shù)據(jù)總量是所有表的數(shù)據(jù)量之和,表的數(shù)據(jù)量是表中所有行的數(shù)據(jù)量之和,所有行的數(shù)據(jù)量是所有單行數(shù)據(jù)的主鍵列和屬性列數(shù)據(jù)量之和。
下面舉例說(shuō)明如何計(jì)算單行和表的數(shù)據(jù)量。
計(jì)算行數(shù)據(jù)量
表格存儲(chǔ)的每行數(shù)據(jù)都占用一定的存儲(chǔ)空間。開(kāi)啟多版本或設(shè)置數(shù)據(jù)表生命周期后,每一個(gè)版本的數(shù)據(jù)需要包括版本號(hào)(占用8字節(jié))、列名和數(shù)據(jù)值。
存儲(chǔ)空間的計(jì)算公式:單行數(shù)據(jù)量=主鍵列的數(shù)據(jù)量+所有屬性列的數(shù)據(jù)量
-
主鍵列的數(shù)據(jù)量=主鍵列的名字長(zhǎng)度之和+主鍵列的值的數(shù)據(jù)量之和
-
屬性列的數(shù)據(jù)量計(jì)算方式,請(qǐng)參考本文檔中關(guān)于行及表的數(shù)據(jù)量計(jì)算示例的具體說(shuō)明。
值的數(shù)據(jù)量的計(jì)算方式:
數(shù)據(jù)類型 | 字節(jié)數(shù) |
---|---|
String | UTF-8字符串占用的字節(jié)數(shù)(表格存儲(chǔ)允許值為空的String類型,如果字符串為空,則數(shù)據(jù)大小為0。) |
Integer | 8 |
Double | 8 |
Boolean | 1 |
Binary | 二進(jìn)制數(shù)據(jù)占用的字節(jié)數(shù) |
行數(shù)據(jù)量的計(jì)算示例:
數(shù)據(jù)表主鍵列為ID(Integer)。其中ID是主鍵列,其他均為屬性列。
ID | Name | Length | Comments |
---|---|---|---|
1 | timestamp=1466676354000,value=‘zhangsan’ | timestamp=1466676354000,value=20 |
timestamp=1466676354000,value=String(100 Bytes) timestamp=1466679954000,value=String(150 Bytes) |
其中Comments有兩個(gè)有效版本:
- 當(dāng)MaxVersions=2,TTL=2592000時(shí):
單個(gè)屬性列的數(shù)據(jù)量=(屬性列名字長(zhǎng)度之和+8)*有效版本個(gè)數(shù)+該屬性列所有有效版本的值數(shù)據(jù)量之和說(shuō)明 在使用多版本(即Max versions>1)或者使用了
TTL(即TTL=-1)
的情況下,每個(gè)版本號(hào)需要占用8字節(jié)(以下提到的timestamp等同于版本號(hào))。該行數(shù)據(jù)量=10+20+22+282=334 Bytes,詳情如下:- 主鍵列數(shù)據(jù)量=len(‘ID’)+len(1)=10 Bytes
- 屬性列Name數(shù)據(jù)量=(len(‘Name’)+8)*1+len(‘zhangsan’)=20 Bytes
- 屬性列Length數(shù)據(jù)量=(len(‘Length’)+8)*1+len(20)=22 Bytes
- 屬性列Comments數(shù)據(jù)量=
(len(‘Comments’)+8)*2+100+150=282 Bytes
- 當(dāng)MaxVersions=1,TTL=-1時(shí):
單個(gè)屬性列的數(shù)據(jù)量=屬性列名字長(zhǎng)度之和+屬性列的值的數(shù)據(jù)量之和
說(shuō)明- 在不使用多版本(即Max versions=1)且不使用TTL(即TTL=-1)的場(chǎng)景下,版本號(hào)不占用字節(jié)。
- 雖然Comments有兩個(gè)版本,但由于MaxVersions=1,只計(jì)算最新的版本。
該行數(shù)據(jù)量=10+12+14+158=194 Bytes,詳情如下:
- 主鍵列數(shù)據(jù)量=
len(‘ID’)+len(1)=10 Bytes
- 屬性列Name數(shù)據(jù)量=
len(‘Name’)+len(‘zhangsan’)=12 Bytes
- 屬性列Length數(shù)據(jù)量=
len(‘Length’)+len(20)=14 Bytes
- 屬性列Comments數(shù)據(jù)量=len(‘Comments’)+150(Bytes)=158 Bytes
計(jì)算表數(shù)據(jù)量
表的數(shù)據(jù)量是表中所有行的數(shù)據(jù)量之和。假設(shè)存在如下表,ID是主鍵列,其他均為屬性列。當(dāng)該表Max versions=2,TTL=-1。其數(shù)據(jù)量計(jì)算方式如下圖所示。
- 對(duì)于ID=1的行,其數(shù)據(jù)量=10(主鍵列數(shù)據(jù)量)+282(Comments屬性列兩個(gè)版本的數(shù)據(jù)量)=292 Bytes。
- 對(duì)于ID=2的行,其數(shù)據(jù)量=10(主鍵列數(shù)據(jù)量)+216(Comments屬性列一個(gè)版本的數(shù)據(jù)量)+22(Length屬性列一個(gè)版本的數(shù)據(jù)量)=248 Bytes。
- 因此該表的數(shù)據(jù)量之和為292+248=540 Bytes。
假設(shè)一小時(shí)內(nèi)表的數(shù)據(jù)量之和未發(fā)生變化,將會(huì)按540 Bytes進(jìn)行計(jì)費(fèi)。表格存儲(chǔ)對(duì)單表數(shù)據(jù)存儲(chǔ)量沒(méi)有限制,用戶可以根據(jù)自己的實(shí)際需求使用,按量付費(fèi)。
存儲(chǔ)量統(tǒng)計(jì)周期
表格存儲(chǔ)的存儲(chǔ)量計(jì)量會(huì)存在一定延遲,一般在24小時(shí)內(nèi)完成。
表格存儲(chǔ)數(shù)據(jù)表基于LSM架構(gòu)實(shí)現(xiàn),數(shù)據(jù)會(huì)采取追加寫入的方式寫入內(nèi)存,當(dāng)數(shù)據(jù)滿足一定條件后會(huì)轉(zhuǎn)存形成一個(gè)小的數(shù)據(jù)文件。對(duì)于單行數(shù)據(jù)的多次更新與刪除操作可能會(huì)分散到多個(gè)小文件中,直接計(jì)算所有文件大小會(huì)造成冗余計(jì)量。而系統(tǒng)會(huì)定期進(jìn)行數(shù)據(jù)文件合并(compaction)清理冗余數(shù)據(jù),為了保障存儲(chǔ)計(jì)量的準(zhǔn)確性,只記錄每次合并后的文件大小。
因此數(shù)據(jù)寫入、更新或刪除后,短時(shí)間內(nèi)表大小可能不會(huì)有變化,存儲(chǔ)量統(tǒng)計(jì)存在一定延遲。存儲(chǔ)量統(tǒng)計(jì)周期與系統(tǒng)合并數(shù)據(jù)文件的周期一致。