开发者社区> 问答> 正文

什么是表格存储中的数据存储


表格存储对实例的数据总量按小时计费。由于用户的数据总量会动态变化,因此表格存储以固定的时间间隔统计数据表所有分区的数据总量大小,计算每小时数据总量的平均值,将平均值乘以单价进行计费。单价可能发生变化,请参见[backcolor=transparent] 阿里云官网信息
实例中所有表的数据大小之和是该实例的数据总量。表的数据大小是表中的所有行数据大小之和,下面举例说明如何计算行和表的数据大小。

行的数据大小计算


表格存储的每行数据都占用一定的存储空间。开启多版本或者打开数据表 TTL 之后,每一个版本的数据需要包括版本号(占用 8 字节)、列名和数据值。
[backcolor=transparent]存储空间的计算方式:


  • 单行数据大小 = 主键的数据大小 + 所有属性列的数据大小

  • 主键的数据大小 = 主键属性列的名字长度之和 + 主键属性列的值的数据大小之和

  • 在不使用多版本(即 Max versions = 1)且不使用 TTL(即 TTL = -1)的场景下,版本号不占用字节:
    单个属性列的数据大小 = 属性列名字长度之和 + 属性列的值的数据大小之和

  • 在使用多版本(即 Max versions > 1)或者使用了 TTL(即 TTL != -1)的情况下,每个版本号需要占用 8 字节:
    单个属性列的数据大小 = (属性列名字长度之和 + 8) * 有效版本个数 + 该属性列所有有效版本的值数据大小之和

[backcolor=transparent]值的数据大小的计算方式:

  • String:UTF-8 字符串占用的字节数。
    表格存储允许值为空的 String 类型,如果字符串为空,则数据大小为 0。

  • Integer:固定 8 字节。

  • Double:固定 8 字节。

  • Boolean:固定 1 字节。

  • Binary:二进制数据占用的字节数。

[backcolor=transparent]一行数据大小的计算示例:
数据表主键列为 ID(Integer)。
IDNameLengthComments
1timestamp = 1466676354000, value = ‘zhangsan’timestamp = 1466676354000, value = 20timestamp = 1466676354000, value = String (100 Bytes); timestamp = 1466679954000, value = String (150 Bytes)

其中,Comments 有两个有效版本:

  • 当 MaxVersions = 2,TTL = 2592000 时,该行数据大小 = 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 时,该行数据大小 = 10 + 12 + 14 + 158 = 194 Bytes,详情如下:

[backcolor=transparent]说明:虽然 Comments 有两个版本,但由于 MaxVersions = 1,只计算最新的版本。

  • 主键数据大小 = 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(主键大小)+(116 + 166)(Comments 属性列两个版本的数据大小) = 292 Bytes。

  • 对于 ID = 2 的行,其数据大小 = 10(主键大小)+ 216(Comments 属性列一个版本的数据大小)+ 22(Length 属性列一个版本的数据大小)= 248 Bytes。

  • 该表的数据大小之和为 292 + 248 = 540 Bytes。

假设一小时内表的数据大小之和未发生变化,将会按 540 Bytes 进行计费。表格存储对单表数据大小没有限制,用户可以根据自己的实际需求使用,按量付费。

[backcolor=transparent]注意:
  • 表格存储会异步地对各个数据分区过期的数据及超过最大版本号的版本数据进行清理操作,并在清理操作完成后统计该数据分区数据大小。清理时长与总数据量相关,一般会在 24 小时内完成。数据清理操作完成后新写入的数据将在下一个数据清理操作之后计入该分区数据量大小。
  • 对于数据存储量,表格存储提供最终精确计量,即,在一段时间没有写入数据或者数据过期之后,数据量的值为精确值。

展开
收起
云栖大讲堂 2017-10-24 17:07:53 2368 0
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
TableStore在社交类场景下的应用 立即下载
表格存储实时数据流Steam的技术揭秘和应用场景 立即下载
表格存储(TableStore) 立即下载