基于Tablestore的一站式物联网存储解决方案-表设计篇

简介: ## 前言本章节主要讲解表格存储Tablestore的实例、表的创建步骤和共享充电宝场景的数据表设计。​## 表设计### 表功能设计这里按照功能需求分为三张数据表:元数据表、订单数据表、元数据时序表- 元数据表元数据表保存了机柜的最新状态数据。用户租借、归还充电宝,以及运维人员上下线机柜,都会更新元数据表记录。在元数据表上建立索引,可提供多维查询的能力。对元数据表按照字段进行

前言

本章节主要讲解表格存储Tablestore的实例、表的创建步骤和共享充电宝场景的数据表设计。

表设计

表功能设计

这里按照功能需求分为三张数据表:元数据表、订单数据表、元数据时序表

  • 元数据表

元数据表保存了机柜的最新状态数据。用户租借、归还充电宝,以及运维人员上下线机柜,都会更新元数据表记录。在元数据表上建立索引,可提供多维查询的能力。对元数据表按照字段进行聚合分析,可获取到机柜损坏比、充电宝租赁比等数据。

  • 订单数据表

订单数据表保存了充电宝租借订单信息。用户租借、归还充电宝会更新订单数据表记录。通过对订单数据表进行流批计算,可以实时获取到营业额报表数据。也可以在订单数据表上建立索引,实现按照订单号、订单日期等字段搜索的功能。

  • 元数据时序表

元数据时许表保存每个时间点上的元数据信息。例如一小时上报一次机柜元数据信息,那么元数据时序表上就会有多份元数据的冗余。通过分析元数据时序表可获取不同时间维度上的机柜状态,例如可统计一天内每个时间段的机柜租赁比。上报的间隔越频繁,可以获取到的时间粒度越细。

表结构设计

在介绍表结构之前,有必要带大家了解一下表格存储Tablestore数据表模型。

宽表模型

宽表模型(Wide column)是Tablestore数据表的物理模型。如下图所示

Tablestore数据表是由多个分区组成的,不同的分区会自动负载均衡到多台物理机(worker)上,提高读写吞吐能力。分区的分布规则,由分区键值决定的,所以设置合理的分区键非常重要。另外,Tablestore数据表是schema-free的,支持的属性列个数无上限,这种结构可以满足诸多机柜元数据字段的存储。

说明:Tablestore表支持多主键,第一个主键作为分区键。更多关于宽表模型的介绍请参考 模型介绍

分区键设计

分区键的值直接影响着数据分布的均匀度,若分区键设置不合理,则可能引起写入倾斜,降低系统整体的负载能力。分区键的值应该尽量保证不递增、离散、均匀。这里机柜ID是按照机柜型号+写入时间戳的格式,若使用机柜ID作为分区键的话,则时间戳越大的数据分布在越靠后的分区,形成尾部热点,所以需要对机柜ID进行Md5打散。考虑到Md5算法的打散规则与字符串前缀相关性很大,这里设置分区键cabinet_Md5ID的格式为Md5(cabinet_location+cabinet_type+timestamp)。这样能最大程度上保证分区键均匀写入到各个分区上。同理,订单数据表的分区键也需要对订单ID进行打散。

说明:更多关于分区键设计的介绍请参考 表设计

表结构列表

元数据表 - cabinet

字段名 描述
主键(分区键) cabinet_Md5ID(String) 机柜Md5ID
主键 cabinet_ID(String) 机柜ID
属性列 cabinet_geo(String) 机柜经纬度
属性列 cabinet_location(String) 机柜地理位置
属性列 cabinet_province(String) 机柜位置所在省份
属性列 cabinet_available_size(long) 可租用充电宝数量
属性列 cabinet_damage_size(long) 损坏的充电宝数量
属性列 cabinet_powerbank_size(long) 机柜槽位
属性列 cabinet_isonline(String) 机柜上线状态
属性列 cabinet_powerPercent(double) 机柜电量百分比
属性列 cabinet_type(String) 机柜型号
属性列 cabinet_manufacturers(String) 机柜生产厂商
属性列 cabinet_overhaul_time(long) 机柜检修时间戳
属性列 cabinet_pricePerHour(double) 机柜充电宝租赁时价(元)

订单数据表 - order

字段名 描述
主键(分区键) order_Md5ID(String) 订单Md5ID
主键 order_ID(String) 订单ID
属性列 order_start_time(long) 租赁时间戳
属性列 order_end_time(long) 归还时间戳
属性列 order_isRevert(bool) 是否归还
属性列 order_lose_pay(double) 未归还违约金
属性列 cabinet_ID(String) 机柜ID
属性列 order_phone(String) 客户手机
属性列 cabinet_pricePerHour(double) 机柜充电宝租赁时价(元)
属性列 cabinet_type(String) 机柜型号
属性列 cabinet_geo(String) 机柜经纬度
属性列 cabinet_province(String) 机柜位置所在省份

元数据时序表 - cabinet_time

字段名 描述
主键(分区键) cabinet_Md5ID(String) 机柜Md5ID
主键 cabinet_ID(String) 机柜ID
主键 cabinet_state_timestamp(long) 数据时间戳
属性列 cabinet_geo(String) 机柜经纬度
属性列 cabinet_location(String) 机柜地理位置
属性列 cabinet_province(String) 机柜位置所在省份
属性列 cabinet_available_size(long) 可租用充电宝数量
属性列 cabinet_damage_size(long) 损坏的充电宝数量
属性列 cabinet_powerbank_size(long) 机柜槽位
属性列 cabinet_isonline(String) 机柜上线状态
属性列 cabinet_powerPercent(double) 机柜电量百分比
属性列 cabinet_type(String) 机柜型号
属性列 cabinet_manufacturers(String) 机柜生产厂商
属性列 cabinet_overhaul_time(long) 机柜检修时间戳
属性列 cabinet_pricePerHour(double) 机柜充电宝租赁时价(元)

以上就是共享充电宝场景所需要用到的表结构了。下面将带大家了解表格存储服务开通、实例创建、表创建等操作步骤。

开通表格存储服务

  1. 登陆阿里云官网表格存储产品页,点击立即开通。若已开通表格存储服务,请跳过此步骤。

创建实例

  1. 登录表格存储产品页,点击管理控制台
说明:可在实例列表页面上方点击 试用新版控制台按钮,切换到新版本控制台
  1. 选择对应的地域,点击创建实例。创建按量模式实例。
说明:实例创建完毕后,会有一段初始化时间,请等待初始化完毕后再进入实例。更多关于实例概念的介绍请参考官网文档 实例

创建表

可以通过表格存储控制台CLI客户端工具SDK代码三种方式创建表。

  1. 表格存储控制台创建

    1. 点击创建数据表

  1. 填写表主键信息。
说明:Tablestore表是Schema-free的,所以不需要指定属性列的字段名和字段类型,通过数据添加接口插入数据即可。
  1. Cli客户端工具创建

    1. 进入表格存储官网,根据操作系统类型下载对应的CLI客户端工具
    2. 输入配置实例接入信息命令 config --endpoint endpoint --instance instance --id id --key key
    3. 输入创建数据表命令 create -t tablename --pk pks --ttl ttl --version version
说明:更多关于CLI客户端工具的用法请参考文档 CLI客户端工具
  1. SDK代码创建

SDK代码创建数据表请参考文档创建数据表

小结

本章节主要介绍了共享充电宝场景的表结构设计,以及表格存储Tablestore的宽表特性。在设计Tablestore数据表的过程中,分区键设计是至为重要的一环,设置合理的分区键可避免数据写入热点,提升读写性能。下一章节将模拟机柜元数据,展示海量数据的读写操作与性能,以及利用多元索引实现共享充电宝场景下的多维查询能力。

联系我们

如对本章节所述有疑问或有其他问题需要咨询,欢迎加入钉钉群:“表格存储公开交流群-2”。群内提供免费的在线专家服务,欢迎扫码加入,群号23307953。

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
7月前
表格存储表删除后重建,为什么会占用空间
表格存储表删除后重建,为什么会占用空间
55 3
|
9月前
|
存储 消息中间件 监控
Tablestore 物联网存储全面升级 -- 分析存储公测
物联网存储功能介绍随着物联网技术的快速发展,物联网已广泛应用于制造业、能源、建筑、医疗、交通、物流仓储等多个领域,物联网的应用能够有效节约资源、提高效率、保障安全以及降低成本,帮助各行业实现可持续发展目标。在物联网场景中根据数据特点进行分类,数据主要包括设备元数据、设备消息数据和设备时序数据三种类型,不同类型数据的存储需求不同。物联网场景中不同类型数据的存储核心需求如下:设备元数据:主要数据为设备
218 0
Tablestore 物联网存储全面升级 -- 分析存储公测
|
11月前
|
存储 人工智能 达摩院
带你读《云存储应用白皮书》之29:2. 物联网大数据存储解决方案
带你读《云存储应用白皮书》之29:2. 物联网大数据存储解决方案
278 1
EMQ
|
存储 SQL 消息中间件
MQX + PolarDB-X 构建一站式物联网数据解决方案
本文详细介绍了如何使用开源分布式物联网MQTT消息服务器EMQX与云原生分布式数据库PolarDB-X打造集成方案,以实现关键物联网数据的一站式采集、传输、存储。
EMQ
515 0
MQX + PolarDB-X 构建一站式物联网数据解决方案
|
存储 SQL 传感器
基于物联网平台的车辆时序数据存储实践
物联网平台 + Tablestore 时序表解决车联网中时序数据存储场景、需求。
729 0
|
存储 SQL 消息中间件
基于物联网平台 + Tablestore,如何打造设备元数据管理平台?
基于物联网平台 + Tablestore,如何打造设备元数据管理平台?
208 0
基于物联网平台 + Tablestore,如何打造设备元数据管理平台?
|
存储 物联网 Android开发
Android物联网应用程序开发(智慧城市)—— 购物信息的存储界面开发
Android物联网应用程序开发(智慧城市)—— 购物信息的存储界面开发
389 0
Android物联网应用程序开发(智慧城市)—— 购物信息的存储界面开发
|
存储 SQL NoSQL
基于物联网平台 + Tablestore 打造设备元数据管理平台
从场景到实践,分享物联网设备元数据场景的业务特点、技术选型和案例实践。
370 0
|
存储 编解码 运维
阿里云云存储(OSS\TableStore\NAS )+CDN 产品: 更快速,更低成本|学习笔记
快速学习 阿里云云存储(OSS\TableStore\NAS )+CDN 产品:更快速,更低成本
415 0
|
7月前
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
64 3

相关产品

  • 物联网平台