基于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
  2. SDK代码创建

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

小结

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

联系我们

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

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
7月前
|
监控 安全 物联网
Java基于物联网技术的智慧工地解决方案源代码
应用先进的大数据、物联网、云计算等数字化技术,融合施工运营管理规范和技术标准,建构支撑施工和运营的一体化平台是投资、施工和运营单位能力建设的关键。应用企业架构、设计思维和软件工程方法,深入分析施工和运营技术特性与管理体系,研究开发基于大数据技术的智慧工地信息一体化平台,智慧工地管理平台是依托物联网、互联网建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。
149 2
|
2月前
|
传感器 机器学习/深度学习 存储
物联网设备精细化管理系统解决方案
随着科技的进步,物联网技术作为新一代信息技术的核心部分,正在深刻改变各行业的生产和管理方式。其在资产管理、智慧城市、能源管理和智慧医疗等多个领域的广泛应用,不仅提高了运营效率,还促进了资源优化配置和精细化管理。本文详细介绍了物联网的基础概念及其在设备精细化管理系统中的具体应用方案,展示了如何通过智能感知层建设、数据处理分析平台以及精细化管理应用,实现设备的实时监控、预测性维护和能耗管理等功能,从而帮助企业提升竞争力,降低成本,并推动社会向更智能化、绿色化的方向发展。
91 2
物联网设备精细化管理系统解决方案
|
2月前
|
存储 监控 物联网
医疗物联网设备精细化管理系统解决方案
华汇数据智慧医院物联网管理系统解决方案是一种集物联网、云计算、大数据和人工智能等先进技术于一体的综合性解决方案,旨在提升医院的运营效率、医疗质量和患者满意度。
79 3
|
2月前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
211 5
|
3月前
|
存储 安全 物联网
.NET 跨平台工业物联网网关解决方案
【9月更文挑战第28天】本文介绍了利用 .NET 构建跨平台工业物联网网关的解决方案。通过 .NET Core 和多种通信协议(如 MQTT 和 Modbus),实现工业设备的高效接入和数据采集。系统架构包括设备接入层、数据处理层、通信层、应用层和数据库层,确保数据的准确采集、实时处理和安全传输。此外,还详细阐述了设备身份认证、数据加密及安全审计等机制,确保系统的安全性。该方案适用于不同操作系统和工业环境,具备高度灵活性和扩展性。
|
4月前
|
存储 安全 物联网
物联网(IoT)安全:挑战与解决方案
【8月更文挑战第5天】物联网(IoT)深刻改变着我们的生活,但随之而来的安全挑战不容忽视。面对设备身份验证复杂、数据隐私泄露、软件漏洞及资源受限等问题,本文提出加强身份验证、加密保护、定期更新、安全开发生命周期、多层次防御、安全培训及标准化合作等解决方案,旨在构建一个更加安全可靠的物联网环境。
|
7月前
|
存储 安全 物联网
物联网设备的安全挑战与解决方案
【5月更文挑战第31天】随着物联网技术的发展,大量设备联网带来严重安全挑战。设备计算能力有限,易受黑客攻击;多样性和复杂性增加管理难度;环境暴露及用户安全意识薄弱也是问题。解决方法包括:增强设备身份认证、定期更新软件、实施网络隔离和访问控制、加密数据以及建立安全监测机制。Python 示例展示了数据加密方法。提升用户安全意识同样关键。综合施策,强化安全研究,保障物联网设备安全,促进行业健康发展。重视物联网安全,打造安全可靠的数字环境。
107 0
|
7月前
|
物联网 PHP 区块链
区块链和物联网解决方案实用指南(二)(3)
区块链和物联网解决方案实用指南(二)
40 0
|
7月前
|
JSON 物联网 PHP
区块链和物联网解决方案实用指南(二)(2)
区块链和物联网解决方案实用指南(二)
37 0
|
7月前
|
物联网 API PHP
区块链和物联网解决方案实用指南(二)(1)
区块链和物联网解决方案实用指南(二)
44 0

相关产品

  • 物联网平台