表格存储对实例的数据总量按小时计费。表格存储以固定的时间间隔统计数据总量,然后计算每小时数据总量的平均值。
如下图所示,表格存储中实例的数据总量是所有表的数据量之和,表的数据量是表中所有行的数据量之和,所有行的数据量是所有单行数据的主键列和属性列数据量之和。
下面举例说明如何计算单行和表的数据量。
计算行数据量
表格存储的每行数据都占用一定的存储空间。开启多版本或设置数据表生命周期后,每一个版本的数据需要包括版本号(占用 8 字节)、列名和数据值。
存储空间的计算公式:单行数据量 = 主键列的数据量 + 所有属性列的数据量
其中,
-
主键列的数据量 = 主键列的名字长度之和 + 主键列的值的数据量之和
-
属性列的数据量计算方式,请参考本文档中关于行及表的数据量计算示例的具体说明。
值的数据量的计算方式:
数据类型 | 字节数 |
---|---|
String | UTF-8 字符串占用的字节数(表格存储允许值为空的 String 类型,如果字符串为空,则数据大小为 0。) |
Integer | 8 |
Double | 8 |
Boolean | 1 |
Binary | 二进制数据占用的字节数 |
行数据量的计算示例:
数据表主键列为 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 有两个有效版本:
- 当 MaxVersions = 2,TTL = 2592000 时:
单个属性列的数据量 = (属性列名字长度之和 + 8) * 有效版本个数 + 该属性列所有有效版本的值数据量之和说明 在使用多版本(即 Max versions > 1)或者使用了
TTL(即 TTL!= -1)
的情况下,每个版本号需要占用 8 字节(以下提到的 timestamp 等同于版本号)。该行数据量 = 10 + 20 + 22 + 282 = 334 Bytes,详情如下:- 主键列数据量 =
len (‘ID’) + len (1) = 10 Bytes
- 属性列 Name 数据量 =
(len (‘Name’) + 8) * 1 + len (‘zhangsan’) = 20 Bytes
- 属性列 Length 数据量 =
(len (‘Length’) + 8) * 1 + len (20) = 22 Bytes
- 属性列 Comments 数据量 =
(len (‘Comments’) + 8) * 2 + 100 + 150 = 282 Bytes
- 主键列数据量 =
- 当 MaxVersions = 1,TTL = -1 时:
单个属性列的数据量 = 属性列名字长度之和 + 属性列的值的数据量之和
说明- 在不使用多版本(即 Max versions = 1)且不使用 TTL(即 TTL = -1)的场景下,版本号不占用字节。
- 虽然 Comments 有两个版本,但由于 MaxVersions = 1,只计算最新的版本。
该行数据量 = 10 + 12 + 14 + 158 = 194 Bytes,详情如下:
- 主键列数据量 =
len (‘ID’) + len (1) = 10 Bytes
- 属性列 Name 数据量 =
len (‘Name’) + len (‘zhangsan’) = 12 Bytes
- 属性列 Length 数据量 =
len (‘Length’) + len (20) = 14 Bytes
- 属性列 Comments 数据量 =
len (‘Comments’) + 150 (Bytes) = 158 Bytes
计算表数据量
表的数据量是表中所有行的数据量之和。假设存在如下表, ID 是主键列,其他均为属性列。当该表 Max versions = 2,TTL = -1。其数据量计算方式如下图:
- 对于 ID = 1 的行,其数据量 = 10(主键列数据量)+282(Comments 属性列两个版本的数据量) = 292 Bytes。
- 对于 ID = 2 的行,其数据量 = 10(主键列数据量)+ 216(Comments 属性列一个版本的数据量)+ 22(Length 属性列一个版本的数据量)= 248 Bytes。
- 因此该表的数据量之和为 292 + 248 = 540 Bytes。
假设一小时内表的数据量之和未发生变化,将会按 540 Bytes 进行计费。表格存储对单表数据量没有限制,用户可以根据自己的实际需求使用,按量付费。