数据存储量

更新时间:
复制为 MD 格式

表格存储按小时对实例的数据存储量计费,计费依据为该小时内的平均数据量。

实例的数据总量等于所有表的数据量之和;表的数据量等于所有行的数据量之和;每行的数据量等于主键列与属性列的数据量之和。

说明

关于最新的单价信息,请参见表格存储价格详情页

下面分别介绍行数据量和表数据量的计算方式。

计算行数据量

每行数据的存储空间由主键列和属性列共同决定:

单行数据量=主键列的数据量+所有属性列的数据量

  • 主键列的数据量=主键列的名字长度之和+主键列的值的数据量之和

  • 属性列的数据量取决于 MaxVersions 和 TTL(Time to Live)设置,详见下方示例。

各数据类型的字节数

数据类型

字节数

String

UTF-8 字符串占用的字节数。空字符串的数据大小为 0。

Integer

8

Double

8

Boolean

1

Binary

二进制数据占用的字节数

提示:属性列名越短,存储费用越低。例如,列名 Name(4 字节)比 CustomerName(12 字节)每行节省 8 字节的存储开销。

示例:行数据量计算

以下示例中,数据表主键列为 ID(Integer 类型),其他均为属性列。

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 和 TTL 设置而不同。

  • 场景一:MaxVersions=2,TTL=2592000

    开启多版本(MaxVersions>1)或设置 TTL(TTL>-1)时,每个版本号以时间戳形式存储,占用 8 字节。

    单个属性列的数据量=(属性列名字长度+8)× 有效版本数+该属性列所有有效版本的值数据量之和

    说明

    在使用多版本(即Max versions>1)或者使用了TTL(即TTL > -1)的场景下,每个版本号需要占用8字节(以下提到的timestamp等同于版本号)。

    该行数据量=10+20+22+282=334 Bytes,详情如下:

    • 主键列(ID):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(2 个版本):(len('Comments')+8)*2+100+150=282 Bytes

  • 场景二:MaxVersions=1,TTL=-1

    MaxVersions=1 且 TTL=-1(不启用 TTL)时,版本号不占用字节。

    单个属性列的数据量=属性列名字长度+属性列的值的数据量之和

    说明
    • 不使用多版本(即Max versions=1)且不使用TTL(即TTL=-1)时,版本号不占用字节。

    • 虽然 Comments 列存有两个版本,但 MaxVersions=1,只计算最新版本。

    该行数据量=10+12+14+158=194 Bytes,详情如下:

    • 主键列(ID):len('ID')+len(1)=10 Bytes

    • 属性列 Name:len('Name')+len('zhangsan')=12 Bytes

    • 属性列 Length:len('Length')+len(20)=14 Bytes

    • 属性列 Comments(仅最新版本):len('Comments')+150=158 Bytes

计算表数据量

表的数据量等于所有行的数据量之和。以下示例中,ID 为主键列,其他均为属性列,MaxVersions=2,TTL=-1。

  • ID=1 的行:292 Bytes — 主键列 10 Bytes + Comments 属性列两个版本 282 Bytes。

  • ID=2 的行:248 Bytes — 主键列 10 Bytes + Comments 属性列一个版本 216 Bytes + Length 属性列一个版本 22 Bytes。

该表的数据总量为 292+248=540 Bytes。若一小时内数据量未发生变化,将按 540 Bytes 计费。

表格存储对单表数据存储量没有限制,按实际用量计费。

说明

表格存储会异步清理各分区中已过期的数据及超过 MaxVersions 的版本数据,清理完成后重新统计该分区的数据量。清理时长与总数据量相关,一般在 24 小时内完成。清理操作完成后新写入的数据,将在下一次清理操作后计入该分区数据量。

存储量统计周期

存储量计量存在一定延迟,一般在 24 小时内完成统计。

延迟原因

表格存储基于 LSM(Log-Structured Merge-tree)架构实现,数据以追加写入方式先存入内存,达到一定条件后转存为磁盘上的小文件。对同一行数据的多次更新和删除操作可能分散在多个文件中,直接汇总所有文件大小会导致重复计量。

为保证计量准确,表格存储在 Compaction(合并操作)完成后才重新计算数据量。Compaction 会定期合并小文件并清除冗余数据。

因此,数据写入、更新或删除后,短期内表的存储量可能不会立即变化。存储量统计周期与系统执行 Compaction 的周期一致。