物联网设备流水入库TDengine改造方案

2023-05-16

1 .存储机制改造

      针对提出的流水查询需求,结合设备上报数据讨论后,初步定以下几种方案。

1.1.ES -> TDengine

1、ES入库有延时
2、ES没有提供数据监听API(不能主动监听,实时监听)
2、有替代方案监听ES数据入库 (被动方式,1、有延时,2、对ES服务有压力)

1.2. 暴露http接口给linkthings调用 -> TDengine 方案

1、服务宕机会丢数据
2、有http并发风险
3、高并发时,也会有一定延时

1.3. 设备流水 -> kafka -> TDengine 方案

1、linkthings需要改动
2、应用组没有消息队列
3、需要服务模块增加
4、需要运维提供

1.4.方案总结

      首先,个人赞成1.3方案,建议应用组增加消息队列服务。从稳定性、数据一致性考虑,方案1.3可以保证数据不丢失、且实时性高。

2.数据库建模方案

      结合目前设备流水数据在ES的存储格式,以及数据的查询、解析、展示。同时分析流水数据展示的场景,结合linkthings、Aep展示数据的界面,初步分析有以下几种建模思路。
      这块设计也主要是因为需求提出的流水查询要混合类型展示对建模有影响。大家有更好的设计想法欢迎明天讨论。

2.1.大宽表设计

2.1.1.简化字段

      就是建表只有设备相关的主要信息,外加上报原始数据、解析后的数据json串存一个字段。
Sql:

CREATE TABLE device_flow_table (
    data_ts TIMESTAMP,
    collect_time TIMESTAMP,
    create_time TIMESTAMP,
    data_str VARCHAR(10000),
    device_code VARCHAR(100),
    device_codes VARCHAR(10000),
    device_createor_id VARCHAR(100),
    device_manufacturer VARCHAR(100),
    device_name VARCHAR(100),
    device_type_name VARCHAR(100),
    device_unit_name VARCHAR(100),
    id VARCHAR(100),
    message VARCHAR(100),
    metadata VARCHAR(100),
    project_name NCHAR(200),
    push_state INT,
    show_message NCHAR(2000),
    storage_time TIMESTAMP,
    old_data_str NCHAR(2000),
    parse_data_str NCHAR(2000)
);

效果
在这里插入图片描述
优点:
1、 结构简单
2、 表字段少,读写效率高
3、 数据入库方便
缺点:
1、 字符串字段有长度限制,万一设备上报字符串过长,有入库失败风险
2、 后期无法通过sql对属性聚合计算
3、 单表数据量大

2.1.2.全字段建列

      这个就是真正意义的大宽表,所有物模型的字段都将建列。
优点:
1、 查询简单
2、 程序解析结果数据简化
3、 可以通过sql做聚合查询
4、 数据入库方便
缺点:
1、 表字段多
2、 查询返回字段多、多null字段,多不相关字段
3、 单表数据量大
PS:
TDengine有说明:表的每行长度不能超过 48KB

2.2.使用超级表

2.2.1单超级表

      超级表使用大宽表,子表按设备型号建,TAG里设置project_id,company_id,unit_code,device_code。
建超级表:

create STABLE device_flow (
    data_ts TIMESTAMP,
    collect_time TIMESTAMP,
    create_time TIMESTAMP,
    data_str VARCHAR(10000),
    device_code VARCHAR(100),
    device_codes VARCHAR(10000),
    device_createor_id VARCHAR(100),
    device_manufacturer VARCHAR(100),
    device_name VARCHAR(100),
    device_type_name VARCHAR(100),
    device_unit_name VARCHAR(100),
    id VARCHAR(100),
    message VARCHAR(100),
    metadata VARCHAR(100),
    project_name NCHAR(200),
    push_state INT,
    show_message NCHAR(2000),
    storage_time TIMESTAMP
) TAGS (device_unit_code varchar(100),
project_id BIGINT,
company_id INT);

建子表:

create table device_flow_ADK_CN_470 USING device_flow tags ("ADK-CN-470",1001,1001001);

在这里插入图片描述

      另一种就是超级表采用2.1.2的思路,TAGS一致。
优点:
1、 分别拥有2.1.1\2.1.2的优点
2、 数据量变小,分物模型存储了
3、 可以自动建表
缺点:
1、 分别拥有2.1.1\2.1.2的缺点
2、 插入数据需要判断型号 (TDengine可以通过超级表查所有子表数据,但是不能通过超级表插入数据到对应子表)

2.2.2多超级表

      拆解一个物模型建一个超级表,再使用2.2.1的思路,这样的超级表字段也少(字段与物模型1:1),但是因为业务需求,列表有不同物模型设备数据统一展示,所以这种设计不行。

      以上使用超级表思路优点类似分片,韵达快递有类似实现:
https://baijiahao.baidu.com/s?id=1731137979785063689&wfr=spider&for=pc (一个扫描枪一张表)

2.3.主副表设计

      主表只记录主要字段,副表是大宽表。查询采用join查询。这里依然是面临字符串超长的问题、字段聚合计算问题。

3.需求与技术冲突

业务需求的设备流水展示界面:
在这里插入图片描述

      从上面可以看出,这个需求与技术实现有冲突,能否按照linkthings一样,根据物模型查,或者设备流水列表按照物模型分组展示?
      但是确实混合展示更符合实际业务与认知习惯。

4.补充说明

1、设备推送数据字段不可预知,需要增加自动增加表字段机制。
2、tags可以有json类型,是否可以变态的设计,将设备上报数据json串放到 tags的字段里?
3、如果使用超级表,建表后超级表新增字段,子表不会对应新增,注意所有表都需要执行新增字段。
      涛思数据有专门的按行业分类的交流群,支持态度也超级好,有什么不懂可以直接在里面问。好了,就写到这里,希望能帮到大家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网设备流水入库TDengine改造方案 的相关文章

  • 使用druid的工具包改sql的库名,实现单实例分库

    前言 xff0c 没时间解释了 xff0c 先贴代码 1 新增自定义Visitor 自定义Visitor 这里是MySQL xff0c 其他数据库请自行更换 public static class MyReplaceTableVisitor
  • 鸿蒙系统遇到crosswalk(XWalkView)闪退,不兼容问题

    废话我懒得说了 xff0c 分析也懒得分析了 反正我研究了2周 xff0c 最后还是csdn解决了我的问题 xff0c 特此感谢 噩梦是鸿蒙3 0小版本 202开始 xff0c 系统会提示老项目版本过低不能运行 然后我升级了sdkapi 到
  • win安装NVM切换node版本

    安装nvm https github com coreybutler nvm windows releases nvm list 是查找本电脑上所有的node版本 nvm list 查看已经安装的版本 nvm list installed
  • 使用AOP打印日志Controller和DubboService的请求参数和相应参数和响应时间

    撸了今年阿里 网易和美团的面试 xff0c 我有一个重要发现 gt gt gt 前言 xff1a 项目为了方便排查问题都会在请求的接口或者暴露的服务前后都会打上日志 这样就搬出了Spring核心功能AOP xff0c 前两天我问一年工作经验
  • S5P6818裸机编程(点灯和按键点灯)步骤和详解

    一 分析LED的原理图 二 裸机编程的思路 分析原理图 xff0c 理解硬件的控制原理 gt 找到控制LED的GPIO gt 查找CPU的使用手册 xff0c 找到控制GPIO的寄存器 gt 理解寄存器的控制原理 gt 编写程序 xff0c
  • 用C语言求n阶魔方阵

    给出n值 xff0c 输出n阶魔方阵 xff08 每一行 xff0c 每一列和对角线之和都相等 xff09 1放在第一行中间从2开始以后的数按以下规则 xff1a 每个数比前一个数行数减一 xff0c 列数加一当上一个数行数为1 xff0c
  • 解决 System has not been booted with systemd as init system (PID 1). Can‘t operate.

    docker 容器使用systemctl 以ubuntu做为参考 拉取容器 直接拉取 使用 docker pull ubuntu 直接拉取 通过Dockerfile拉取 Dockerfile 基础镜像 FROM ubuntu 18 04 b
  • SQLServer批量更新、批量插入数据

    https blog csdn net fengkang511 article details 51778984 utm medium 61 distribute pc aggpage search result none task blo
  • 使用powershell 开启或关闭NLA

    关闭NLA 96 span class token variable registryPath span 61 span class token string 34 HKLM SYSTEM CurrentControlSet Control
  • SVN异常之svn:E230001 Server SSL certificate verification failed

    起因 某一天上班 xff0c 使用idea更新代码 xff0c 发现出现如下问题 xff1a Error svn E230001 Unable to connect to a repository at URL 39 https xxx x
  • 在Linux下,禁止某一个显示屏的输出

    今天接到了一个任务 xff0c 实现显示屏的关和开 理了下思路 xff1a 1 需求 xff1a 实现终端的开关屏 xff0c 要求仅仅是终端的屏幕关掉了 xff0c 但是系统仍旧在跑 xff0c 可以用遥控器唤醒 2 方向 xff1a 2
  • 十分钟搞懂字符编码

    编码方式描述ANSI编码常见于window xff0c 与windows操作系统所面向的国家地区有关在简体中文Windows操作系统中 xff0c ANSI 编码代表 GBK 编码在繁体中文Windows操作系统中 xff0c ANSI 编
  • python数字运算

    加法 num1 span class token operator 61 span span class token builtin input span span class token punctuation span span cla
  • k8s集群运维之master节点无法调度问题

    k8s集群创建完成后 xff0c 在部署应用的时候发现master节点无法部署pod 解决步骤如下 查看节点名称 master01 k8s git span class token punctuation span master span
  • Debian 9安装Clion 2018

    现在去官网直接下载 https www jetbrains com clion 解压缩 tar zxvf CLion 2018 1 5 tar gz cd clion 2018 1 5 bin clion sh CLion是收费 的 xff
  • 从用户email信息分析是否为qq邮箱并截取qq号的sql语句

    思路 xff1a 1 email是qq邮箱 2 qq邮箱也可以自己注册的 xff0c 39 64 39 前面有可能是随意填写的字符串 xff0c 过滤 39 64 39 前面不是数字的 3 截取符合邮箱 39 64 39 前面部分即为qq号
  • 解决Ubuntu虚拟机NAT不能上网的几种方法

    vmware安装ubuntu虚拟机后 xff0c 网络经常抽风 也不知道具体是什么原因导致的 有时候开机就不能上网 xff0c 有时候 xff0c 是突然不能上网 这个时候 xff0c 尝试重启虚拟机后者电脑 xff0c 看看能否解决 或者
  • 显示https不安全的原因及解决办法

    很多人在部署了https证书之后 xff0c 有的时候仍然会出现https 不安全 的提示 xff0c 这就比较纳闷了 明明说部署了https证书会受到浏览器的信任的 xff0c 怎么还会出现这种情况 xff1f 安信SSL帮大家分析一下原
  • 小程序input输入限制小数位数

    小程序input组件本身没有自带这个校验属性 xff0c 但有一个maxlength属性 xff0c 可以通过是否输入了小数点来动态计算设置maxlength的方法达到限制输入的目的 保留一位小数 lt view class 61 34 l
  • js数组对象去重

    removeID span class token operator 61 span span class token punctuation span arr span class token punctuation span span

随机推荐

  • 解决echarts刷新不重绘

    切换筛选条件重新查询时候Echart不重新绘制 需要绘制之前初始化Echart echarts span class token punctuation span span class token function init span sp
  • 判断是否有值,0也是有值的情况

    span class token operator span span class token function isNaN span span class token punctuation span span class token f
  • 基于高德地图SDK进行搜索

    高德地图SDK使用地址http lbs amap com 地图设置 define GDMAPKEY 64 34 key 34 import 34 ViewController h 34 import lt MapKit MapKit h g
  • Microsoft Visual C++ Build Tools.exe安装包损坏

    Python3安装支持库的过程中经常会遇到 Microsoft Visual C 14 0 is required 此时就需要安装Visual C build tools生成工具 在运行build tool安装时 提示安装包损坏 翻墙也无效
  • debian图形界面安装

    安装GNOME中文桌面环境 安装基本的X系统 apt get install x window system core 安装GNOME桌面环境 apt get install gnome 到现在为止 xff0c 我们已成功安装完成gnome
  • Qt 调试时 程序异常结束

    在调试时 xff0c 关闭窗口 xff0c 应用程序输出窗口提示 Qt 调试时 程序异常结束 21 20 48 程序异常结束 21 20 48 The process was ended forcefully 21 20 48 G proj
  • c#webservice的简单示例

    是webservice 就概念上来说 xff0c 可能比较复杂 xff0c 不过我们可以有个宏观的了解 xff1a webservice就是个对外的接口 xff0c 里面有 函数可供外部客户调用 xff08 注意 xff1a 里面同样有客户
  • 实现常规厂家&品牌&型号业务对接物联网平台(snack3加json赋能)

    前言 之前介绍过通过snack3快速对接物模型 xff0c 不知道大家还有没有影响 记得还留了一个作业给大家想想 xff0c 就是这么兼容多型号 多版本 xff0c 这次就来跟大家分享下这么集成多型号 一 物模型文件调整 上次是利用snac
  • 组合OSS服务实现打包业务文件zip下载

    前言 实现文件打包成zip下载 xff0c 支持zip包含目录 文件 废话不多说 xff0c 直接上码 一 设计思路 后端组织文件 xff0c 打包成zip上传到OSS存储返回文件名称给前端前端根据返回的文件名称 xff08 url xff
  • Spring Boot + Disruptor = 王炸!!

    01 背景 工作中遇到项目使用Disruptor做消息队列 对你没看错 不是Kafka 也不是rabbitmq Disruptor有个最大的优点就是快 还有一点它是开源的哦 下面做个简单的记录 02 Disruptor介绍 Disrupto
  • Dbeaver连接ES问题一站解决

    前言 最近几天一直做ES的TPS测试 xff0c 每次看数据ES的数据都在嫌麻烦 xff08 在postman指定索引通过url请求查看数据 xff09 最后决定还是整整Dbeaver连接ES 一 当前境况 1 ES版本比较老 xff0c
  • Dbeaver连接TDengine时序数据库

    前言 还是结合上一阶段的工作 xff0c 为TPS满足合同里的要求 xff0c 预研数据库切换为TDengine 所以查看数据的工具我得能连上去看 xff0c 习惯了Dbeaver xff0c 所以先把Dbeaver整的能连接使用 一 Db
  • idea+ApifoxUploader+Apifox真是内外双修,香

    前言 最近部门为整合后端组 前端组 测试组 需求组 产品组等组之间的工作流程 xff0c 旨在提高协调与高效 xff0c 其中之一就是希望开发组 xff08 后端 前端 xff09 开发的接口能及时更新 xff0c 测试组能做接口测试 xf
  • SpringBoot3+最新MybatisPlus+Mysql与TDengine双数据源

    前言 昨天写的idea 43 Apifox uploader插件 43 apifox新年第一天上班就上榜了 xff0c 真是不错 今天来补一篇 xff0c 本来应该是在前一篇之前发的 实际上就是最新的springBoot集成最新的mybat
  • 业务平台扩展支持TDengine时序数据库方案

    1 场景与架构 1 1业务架构 这里涉及项目隐私 xff0c 架构图不方便公开 大致情况就是 xff1a 应用层的园区畅行 生态宜居 安全守护是我方要交付的系统 平台层的物联网感知中台是我方平台 1 2数据架构 从数据架构看 xff0c 园
  • 物联网平台+业务平台基本架构设计与优化想法

    前言 目前的交付底座有点老 xff0c 而且集成的有点杂 xff0c 计划是要升级下 xff0c 先说想法 xff0c 看领导做不做 1 业务平台定位 我们的愿景 xff1a 通过物联平台赋能 xff0c 让数据产生价值 为客户提供可视化的
  • Qt 正则表达式匹配失败的一个原因

    在Qt中做正则表达式时 xff0c 遇到一个很坑爹的问题 xff0c 还是经验不足导致 在正则表达式中 xff0c 有很多需要元字符 xff0c 是需要使用普通字符加转义符号搭配使用的 比如 w xff0c s 对于这类字符 xff0c 在
  • C++对象模型(整理)

    C 43 43 对象模型 1 何为C 43 43 对象模型 xff1f C 43 43 对象模型可以概括为以下2部分 xff1a 语言中直接支持面向对象程序设计的部分 面向对象程序设计部分 xff1a 如构造函数 析构函数 虚函数 继承 x
  • MybatisPlus多表查询之零sql编写实现

    1 前言 年初节奏还没有快起来 xff0c 适合做做技术前瞻 xff0c 无论是对个人还是团队都是好事 真要说分享 xff0c 其实感觉也没啥好分享的 xff0c 就像接手新项目一样 xff0c 代码都是自己看 xff0c 别人讲的再多 x
  • 物联网设备流水入库TDengine改造方案

    1 存储机制改造 针对提出的流水查询需求 xff0c 结合设备上报数据讨论后 xff0c 初步定以下几种方案 1 1 ES gt TDengine 1 ES入库有延时 2 ES没有提供数据监听API xff08 不能主动监听 xff0c 实