时序数据库TDengine建模思路

news2025/9/14 4:30:38

一、时序数据库基本概念

基本属性

1.采集量

  • 采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的参数

2.标签

  • 标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的比如设备ID,设备型号,设备所在地

3.数据采集点

  • 数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。

4.表

  • TDengine 采取一个数据采集点一张表的策略,要求对每个数据采集点单独建表(比如有一千万个智能电表,就需创建一千万张表),用来存储这个数据采集点所采集的时序数据。这种设计有几大优点
    • ​​​​​① 不同数据采集点产生数据的过程完全独立,每个数据采集点的数据源是唯一的,一张表也就只有一个写入者这样就可采用无锁方式来写,写入速度就能大幅提升。
    • ② 对于一个数据采集点而言,其产生的数据是按照时间排序的,因此写的操作可用追加的方式实现,进一步大幅提高数据写入速度
    • ③ 一个数据采集点的数据是以块为单位连续存储的。如果读取一个时间段的数据,它能大幅减少随机读取操作,成数量级的提升读取和查询速度。

5.超级表

  • 由于一个数据采集点一张表,导致表的数量巨增而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。
  • 超级表是指某一特定类型的数据采集点的集合。同一类型的数据采集点,其表的结构是完全一样的,但每个表(数据采集点)的静态属性(标签)是不一样的。描述一个超级表(某一特定类型的数据采集点的集合),除需要定义采集量的表结构之外,还需要定义其标签的 Schema,标签的数据类型可以是整数、浮点数、字符串、JSON,标签可以有多个,可以事后增加、删除或修改。如果整个系统有 N 个不同类型的数据采集点,就需要建立 N 个超级表。
  • 在 TDengine 的设计里,表用来代表一个具体的数据采集点,超级表用来代表一组相同类型的数据采集点集合

6.子表

  • 当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。通过超级表创建的表称之为子表
  • 一张超级表包含有多张子表,这些子表具有相同的采集量 Schema,但带有不同的标签值
  • 不能通过子表调整数据或标签的模式,对于超级表的数据模式修改立即对所有的子表生效
  • 超级表只定义一个模板,自身不存储任何数据或标签信息。因此,不能向一个超级表写入数据,只能将数据写入子表中
  • 查询既可以在表上进行,也可以在超级表上进行。针对超级表的查询,TDengine 将把所有子表中的数据视为一个整体数据集进行处理,会先把满足标签过滤条件的表从超级表中找出来,然后再扫描这些表的时序数据,进行聚合操作,这样需要扫描的数据集会大幅减少,从而显著提高查询的性能。本质上,TDengine 通过对超级表查询的支持,实现了多个同类数据采集点的高效聚合
     

在智能电表的示例中,我们可以通过超级表 meters 创建子表 d1001、d1002、d1003、d1004 等。为了更好地理解采集量、标签、超级与子表的关系,可以参考下面关于智能电表数据模型的示意图。
 

7.

  • TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能最大效率的工作,TDengine 建议将不同数据特征的超级表创建在不同的库里

二、TDengine数据库建模策略

        1.建表模式

                1.单列模式:

                        每个采集的物理量都单独建表,因此每种类型的物理量都单独建立一超级表

               2.多列模式:

                       只要物理量是一个数据采集点同时采集的(时间戳一致),这些量就可以作为不同列放在一张超级表里

        2.建表情形

​​​​​​​​​​​​一、按照设备建表即一个设备一张表,这种情况有以下特点

  1. 就同一个设备而言,各采集指标同时采集,采集时间戳相同。
  2. 就同一个设备而言,各采集指标每次采集的数据最好是在同一个消息中上报到 TDengine,而非分别上报
  3. 相同类型的设备,采集指标完全相同。

这种情景下采用多列模式,即为每个类型的设备创建一张多列超级表。

为该类型的每个设备创建一张子表。

子表从第二列起,每一列均为一个采集指标。

按照设备建表,但同类型设备的采集指标不完全相同

这种情况和情形一的区别是每个设备可能有个性化的采集指标。:

  •        ① 相同类型的设备,采集指标大体相同,但每个设备可能有少量个性化的指标
  •                 (前提:所有个性化指标总数加上共有指标总数不超过 4096 个)

针对这种情形的处理思路常称为“大宽表”:

        1.创建一个多列超级表,包含所有不同的采集指标列,为所有采集指标的全集。

        2.为每个设备创建一张子表。

        3.子表从第二列起,每一列均为一个采集指标。

        4.数据写入时,对于该设备不具备的采集指标填入 null 值。

三、按照采集指标建表,每一个采集参数对应一张表

        更复杂的场景中,设备的固定表结构很难抽象出来,或者表结构经常改变,无法固定,此时需要有更灵活的处理思路。以下任一个特点满足时,需考虑按指标建表的思路:

        1.相同类型的设备,采集指标无法固定,或者每个设备有大量个性化的指标。

        2.就同一个设备而言,各采集指标有各自的采集时间戳。(即同一个设备的不同采集指标的采集时间、采集周期等无法保证相同)

        3.就同一个设备而言,各采集指标每次采集的数据分多个消息上报到 TDengine,且时间延迟无法确定。

这种情形要求更高的灵活性。一般处理思路如下:​​​​​​​

  1. 创建单列的超级表,即时间戳+采集值,而在标签项中增加采集指标的设备ID这一标签。

  2. 每个设备的每个采集指标单独创建一张表,在标签项中增加具体的设备ID。

  3. 不同数据类型的采集指标要划归不同超级表,比如数值型、布尔型和字符串型的数据应该分别归入三类对应的超级表。

四、按照数据采集点建表

对每个数据采集点需要独立建表。创建时,需要使用超级表做模板,同时指定标签的具体值

应用场景:

        1.相同类型的设备,采集指标不固定。

        2.就同一设备而言,各采集指标有各自的采集频率,不过采集频率是确定的,比如 PLC1~PLC10 的采集频率是 10ms,PLC11~PLC20 的采集频率是 20ms。

        3.就同一设备而言,后续可能会动态添加 PLC 通道。期望可以在不修改代码的情况下动态增加超级表的列。

可以为每一种类型的数据采集点建立一个超级表,在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。

将同一设备下采集周期相同的指标也就是具有相同的时间戳的参数作为一个采集点创建超级表。

每个采集点的数据对应一个子表。

以上几种建模思路基本可以应对大多数的业务场景。当然实际业务中的情况是多种多样的,更为复杂的业务场景可以再共同讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯 CSS3 卡通小火车行驶动画

自从CSS3流行以来,基于纯CSS3的动画就层出不穷,有纯CSS3的人物动画、纯CSS3按钮动画等。这次,我们给大家分享一个很不错的CSS3卡通火车沿轨道行驶动画,一辆卡通样式的火车缓缓驰过,特别是火车头的动画设计,…

二叉树21:合并二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:617. 合并二叉树 题目: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其…

Vuex状态管理

Vuex:管理组件中共用的一些状态,并能够做一些操作 一、准备工作 安装Vuex ① 默认安装vuex4版本:执行命令 npm install vuex ② 指定安装vuex3版本:执行命令 npm install vuex3 引入Vuex 在src目录下新建名称为store的文件夹&am…

微信小程序wxss相关介绍、全局配置和tabbar知识以及发送数据请求(post,get)

wxss相关介绍 什么是wxss??? wxss (WeiXin Style Sheets)是一套样式语言,用于美化WXML的组件样式,类似于网页开发中的CSS。 WXSS 具有CSS大部分特性,同时,WXSS还对CSS进行了扩充以及修改,以适应微信小程序的开发。 …

数据探索性分析(EDA)——不平衡样本处理

1、何为不平衡样本? 样本不平衡是指分类任务中不同类别的训练样例数目差别很大的情况。在实际的分类任务中,我们经常会遇到类别不平衡,例如广告点击率预测、情感分类、异常检测等。而机器学习算法通常假设不同类别的样本数量大致相似&#x…

【4】k8s_NameSpacePod

目录 一、NameSpace 二、Pod 【1】命令式对象管理: 直接使用命令去操作kubernetes资源 【2】命令式对象配置: 通过命令配置和配置文件去操作作kubernetes资源 1、写一个ymal文件 2、然后运行yaml文件(提前创建好了命名空间string) 3、用bashboard创…

案例分享|方形锂电池铝壳外观缺陷检测

SNE Research最新披露的数据显示,2022年1-11月,宁德时代、比亚迪和中航锂电三家中国企业合计占全球动力电池市场份额的54.7%,排名前十的动力电池企业中,中国企业占据6席,合计市场份额达到64.5%。随着动力电池企业的强势…

数据库管理-第五十二期 有感~而发(20230113)

数据库管理 2023-01-13第五十二期 有感~而发1 AHF2 系统3 文档总结第五十二期 有感~而发 再过一周就过年了,感觉时间过得好快,但是又好忙,总在协助处理紧急时间和异常,忙的停不下来。 1 AHF 最近对X9M那台一体机,主…

力扣16.最接近的三数之和

力扣16.最接近的三数之和 题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,…

(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

笔者总结不容易点个关注吧 一键三联哦! 感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将file_version_info.txt改为新的名称才生效 pyinstaller --version-file file_version_info.txt -D -w …

【bug】【vxe-table】设置固定列,表头后端返,样式错乱已解决

bug产生的原因以及解决的方法都很简单 但是要复现bug,就得把前因都铺垫清楚才行 一、前因 项目用的是vxe-table,并且封装成了组件,方便大量调用 并且column是后端动态返的,只需要绑定指定id给后端就行,大概就是这样&a…

npm ERR! Unexpected token ‘.‘ 报错解决办法

报错截图如下: 每次使用 nvm 将 node 切换到高版本后,运行 npm 相关的命令就报这个错,网上搜寻一番后,现将解决办法进行记录。 解决办法: 1、通过 nvm uninstall [version] 命令将已经安装的 node 版本依次删除。 [v…

CHAPTER 7 *使用Dockerfile创建镜像

dockerfile7.1 基本结构7.2 指令说明7.2.1 ARG7.2.2 FROM7.2.3 LABEL7.2.4 EXPOSE7.2.5 ENV7.2.6 ENTRYPOINT7.2.7 VOLUME7.2.8 USER7.2.9 WORKDIR7.2.10 ONBUILD7.2.11 STOPSIGNAL7.2.11 HEALTHCHECK7.2.12 SHELL7.2.13 RUN7.2.14 CMD7.2.15 ADD7.2.16 COPY7.3 创建镜像7.3.1 …

版本控制 | 设计师和美术人员的理想版本控制软件是?

版本控制对于开发人员来说是必不可少的工具。但今天,开发已经不仅仅包括代码。让美术人员和设计师使用版本控制能够集中协作,并保护宝贵的数字资产。 本篇文章将分析为什么版本控制对设计师也如此重要,并且回答一个重要的问题——对于设计师…

HTML实现闪电打字效果

演示 完整HTML <!doctype html> <html> <head> <meta charset"utf-8"> <title>H5 Canvas雷电打出文字特效</title><style> .page-thunder-to-text {position: relative;overflow: hidden; } .page-thunder-to-text canv…

每日坚果“鼻祖”,沃隆再闯IPO

成于坚果&#xff0c;困于坚果&#xff1f;“坚果大队长”沃隆再次闯关IPO。“每日坚果鼻祖”青岛沃隆食品股份有限公司&#xff08;下称“沃隆”&#xff09;于1月6日更新招股书&#xff0c;拟登陆上交所主板。沃隆是一家以坚果相关产品为核心的休闲食品生产商&#xff0c;主要…

SAP PP 生产版本主数据维护

PP生产版本主数据 生产版本&#xff08;Production Version&#xff09;主数据是执行生产业务过程中最主要的基础数据之一&#xff0c;包含了产品的数量结构信息&#xff0c;同时也包含了产品的工艺路线&#xff0c;工作中心等信息。生产版本主记录里包含了产品代码、工艺路线、…

三,Spring AOP

Spring AOP 1 代理设计模式 1.1 解决的问题 Service层中除了核心代码&#xff08;调用dao逻辑判断&#xff09;外&#xff0c;还有事务控制这种额外的增强功能。现在我们将核心业务代码和事务控制增强编码在一起直接定义在service层&#xff0c;日后还可能会新增其它的额外功…

docker安装与基本介绍使用

Docker 一、初识Docker 1、安装Docker # 1.yum包更新到最新 yum update # 2.安装需要的软件包&#xff0c;yum-util提供的yum-config-manager&#xff0c;例外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3.设置yum源 yum…

hololens2开发环境配置,游戏引擎的全流程安装部署

要进行hololens 2的项目开发&#xff0c;进行基础环境搭建和软件安装部署的记录。 软件安装 UE ue2.6x(安装hololens平台)openxr插件&#xff0c;ux插件&#xff08;可选&#xff09; unity3d unity3d 2020&#xff08;unity3d 2021在打包时&#xff0c;在universal windo…