天天看点

Tablestore入门手册--数据表meta信息介绍

若有幸这篇文章也许会是您准备上手实践Tablestore的第一篇帮助文档,本文将通过介绍Tablestore的基础模型使大家理解Tablestore的数据表结构。主要讲如何设置数据表的Meta信息,建一张最适合自己业务的表,祝阅有所得,漫步云端。

控制台创建数据表

Tablestore控制台

登录入口

数据表meta参数解读

数据表meta参数的设置选择:

Tablestore入门手册--数据表meta信息介绍
  • 数据表名称:数据表名称在单个实例中必须是唯一的。
  • 预留读/写吞吐量:与 计量计费 相关,高性能实例下表的属性信息包含预留读/写吞吐量,预留值可以设置为 0。预留读/写吞吐量的设置不影响数据表的读写性能和服务能力。若预留读/写吞吐量不为 0,数据表创建后,将会按照预留吞吐量立即开始计费。(如果是长期有稳定读写量的业务,选择配置合适的预留读写量,超出部分按量付费可以优化成本)
  • 数据生命周期(Time To Live):每个表可定义数据生命周期,例如生命周期配置为一个月,则该表数据中在一个月之前写入的数据就会被自动清理。数据的写入时间由版本来决定,版本一般由服务端在数据写入时根据服务器时间来定,也可由应用自己指定。(Tablestore暂时不提供批量删除的操作,合理设置数据的生命周期可以高效地清除过期数据 )
  • 最大数据版本(MaxVersion):每个表可定义每一列最多保存的版本数,用于控制一列的版本的个数,老版本的超过个数上限的数据会被自动清理。
  • 数据有效版本偏差:属性列的有效版本范围为:

    [数据写入时间 - 有效版本偏差,数据写入时间 + 有效版本偏差)

    。属性列版本号为毫秒,其除以 1000 换算成秒之后必须属于这个范围。如果当版本不属于这个 范围 ,该行数据写入失败。
  • 主键(Primary Key):主键由(1-4列)主键列构成,建表时明确每列主键列数据类型,主键的配置及顺序一旦设置便不可修改,主键唯一区分一行数据。主键列支持多种数据类型(Integer、String、Binary),非分片键可以设置为自增列(写入数据时自动生成且分区内严格递增)。
  • 预定义列:Tablestore的属性列Schema free,原则上一行数据可以写入任意列,无需固定属性列schema。但是也可以在建表时预先定义一些列固定schema,主要用于建立 二级索引 ,二级索引暂不支持多版本。

数据表结构解读

插入一些数据来看数据表的结构:

Tablestore入门手册--数据表meta信息介绍
  • 行:表是行的集合,而每个行是主键和属性的集合。
  • 列:分为主键列和属性列,主键列的集合称为本行的主键,属性列的集合称为本行的属性。创建表的时候,必须明确指定主键、每一个主键列的名字、数据类型以及主键列的顺序。Tablestore根据表的主键索引数据,表中的行会按照主键进行升序排序。每行的属性列个数没有限制,即每行的属性列可不同,一个属性列在某一行的值可为空,同一个属性列的值可以有多种数据类型。
  • 版本:每次更新属性列的值都会为该值生成一个新版本,每个版本会带一个可自定义的版本号,默认是当前时间的毫秒单位时间戳。
  • 数据生命周期:数据的存活时间,单位为秒。Tablestore会在后台对超过存活时间的数据进行清理,以减少用户的数据存储空间,降低存储成本。

Tablestore的数据表结构可以理解为一张三维表,以主键做唯一区分的每一行,行中列的数目不需要提前定义,列的数据类型也不需要提前定义;在此基础上增加时间维度,体现为属性列可以保存多个版本,每个版本有一个Timestamp作区分。

更多建表方式

CLI工具创建数据表

  • TablestoreCLI工具建表 步骤
Tablestore入门手册--数据表meta信息介绍

使用SDK创建数据表

  • 使用SDK创建数据表的参数列表、样例代码详见各语言的SDK建表页。例: JAVA
private static void createTable(SyncClient client) {
        TableMeta tableMeta = new TableMeta(TABLE_NAME);
        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME, PrimaryKeyType.STRING)); // 为主表添加主键列。
        int timeToLive = -1; // 数据的过期时间,单位秒, -1代表永不过期,例如设置过期时间为一年, 即为 365 * 24 * 3600。
        int maxVersions = 3; // 保存的最大版本数,设置为3即代表每列上最多保存3个最新的版本。
        TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
        CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
        request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); // 设置读写预留值,容量型实例只能设置为0,高性能实例可以设置为非零值。
        client.createTable(request);
    }           

表设计优化

表设计优化的重点是主键的设计,以数据散列为目标,使数据分布更均匀,避免热点,详细

表设计优化参考