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

这篇具有很好参考价值的文章主要介绍了物联网设备流水入库TDengine改造方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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)
);

效果
tdengine 消息队列,架构,升级改造,时序数据库,tdengine,物联网设备流水,TDengine替换ES,时序数据库替换ES
优点:
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);

tdengine 消息队列,架构,升级改造,时序数据库,tdengine,物联网设备流水,TDengine替换ES,时序数据库替换ES

      另一种就是超级表采用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.需求与技术冲突

业务需求的设备流水展示界面:
tdengine 消息队列,架构,升级改造,时序数据库,tdengine,物联网设备流水,TDengine替换ES,时序数据库替换ES

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

4.补充说明

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

到了这里,关于物联网设备流水入库TDengine改造方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker版TDengine2.6升级到Tdengine3.0

    此升级性质为导入导出操作 2.6版本操作步棸 进入docker容器 docker exec -it a5f88c26119d bash 查找taosdump文件路径 find -name /taosdump 进入taosdump外层文件夹中,执行导出命令 ./taosdump -o /root -D power -T 4 实际导出命令可根据个人需求查到官方文档,下图是导出成功后的结果 进入容器root文件

    2024年02月12日
    浏览(26)
  • 【TDengine】一篇文章带你通过docker安装TDengine数据库

    目录 1、通过docker方式安装 2、相关步骤解释 3、停止运行taos与卸载 虽然并不推荐在生产环境中通过 Docker 来部署 TDengine 服务,但 Docker 工具能够很好地屏蔽底层操作系统的环境差异,很适合在开发测试或初次体验时用于安装运行 TDengine 的工具集。特别是,借助 Docker,能够比

    2024年02月15日
    浏览(39)
  • TDengine Kafka Connector将 Kafka 中指定 topic 的数据(批量或实时)同步到 TDengine

    教程放在这里:TDengine Java Connector,官方文档已经写的很清晰了,不再赘述。 这里记录一下踩坑: 1.报错 这是由于没有按照taos客户端,连机器内部调用了taos客户端程序去连接TDengine服务,只要安装TDengine Client即可。安装TDengine Client教程 2.报错 这个报错是因为我部署TDengine服

    2024年02月04日
    浏览(37)
  • TDengine函数大全-目录

    详情见具体页面,点击进入。 1.数学函数 ABS ACOS ASIN ATAN CEIL COS FLOOR LOG POW ROUND SIN SQRT TAN 2.字符串函数 CHAR_LENGTH CONCAT CONCAT_WS LENGTH LOWER LTRIM RTRIM SUBSTR UPPER 3.转换函数 CAST TO_ISO8601 TO_UNIXTIMESTAMP TO_JSON 4.时间和日期函数 NOW TIMEDIFF TIMETRUNCATE TIMEZONE TODAY 5.聚合函数 APERCENTILE AVG COUNT E

    2024年02月10日
    浏览(30)
  • TDengine函数大全-聚合函数

    以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 APERCENTILE 功能说明 :统计表/超级表中指定列的值的近似百分比分位数,与 PERCENTIL

    2024年02月10日
    浏览(35)
  • TDengineGUI无法连接TDengine

    可能是TDengineGUI本身的问题,直接下载可执行文件即可 下载地址:Release 1.0.3 · ericyangpan/TDengineGUI (github.com) 还有可能是你的6041端口没开注意检查 可在TDengine文件夹下直接执行 systemctl start taosadapter 也可以点击 taosadapter.exe 还可以在任务管理器手动打开taosadapter

    2024年04月24日
    浏览(22)
  • TDengine 签约西电电力

    近年来,随着云计算和物联网技术的迅猛发展,传统电力行业正朝着数字化、信息化和智能化的大趋势迈进。在传统业务基础上,电力行业构建了信息网络、通信网络和能源网络,致力于实现发电、输电、变电、配电和用电的实时智能联动。在这个过程中,电力物联网领域产

    2024年01月24日
    浏览(35)
  • TDengine函数大全-选择函数

    以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 BOTTOM 功能说明 :统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一

    2024年02月10日
    浏览(36)
  • TDengine启动和连接问题

    测试TDengine,使用docker安装运行,宿主机ip 192.168.0.100。下载windows客户端,配置如下: hosts配置:192.168.0.100 tdnode1 taos.cfg配置:firstEp和fqdn均为tdnode1,端口不变 docker运行命令: 使用客户端连接出现如下错误: Failed to check Server Edition, Reason:0x80002662:Fail to get table info, error: some

    2024年01月18日
    浏览(34)
  • TDengine快速入门

    1.创建Docker容器并运行 使用 docker run 命令启动运行 TDengine server 的 docker 容器,并使用 --name 命令行参数将容器命名为 tdengine ,使用 --hostname 指定 hostname 为 tdengine-server ,通过 -v 挂载本地目录到容器,实现宿主机与容器内部的数据同步,防止容器删除后,数据丢失。 –name t

    2023年04月17日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包