【二】TDEngine快速入门

news2024/9/21 10:45:46

TDEngine快速入门

目录

TDEngine深入理解

概述

一、核心概念解析

二、基本操作

三、可视化管理工具

总结


概述

        TDEngine创始人在官方出品的书籍中写到:我观察到,无论是出行行业还是更广义的运输行业,以及分布式能源系统,都将产生海量的时序数据。这些数据的规模超出了传统数据库或大数据平台的高效处理能力,迫切需要专用的时序数据处理工具。读到这段话我看到了创始人使命感,而我正是从事能源电力行业,电力行业有很大的一部分是物联网业务,所以个人肩负着对时序数据库知识的传播的”使命“。

        本篇旨在帮助大家深入理解TDEngine,按照个人学习一项新技术的路线,我们首先需要去了解涉及到的核心概念,然后去学习基本的操作,另外会找一款趁手的可视化管理工具,这三方面是深入理解一项技术的关键。

一、核心概念解析

        TDengine 采用 SQL 作为查询语言,大大降低学习成本、降低迁移成本,但同时针对时序数据场景,又做了一些扩展,以支持插值、降采样、时间加权平均等操作。既然采用的是SQL作为查询语言那我们就可以运用之前学习MySQL的经验了,首先了解一下支持的数据类型、数据库、表、函数、运算符等概念。

        要了解清楚基本概念我们需要阅读快速入门这一章中三小结的内容,首先数据模型一章节讲解了如下内容:

在这一章节为了清晰地阐述时序数据的基本概念,官方通过结合示例的方式来讲解的,这里对比于MySQL有几个新的概念大家需要去理解一下

采集量

采集量是指通过各种传感器、设备或其他类型的采集点所获取的物理量,如电流、电压、温度、压力、GPS 等。

这些采集点在物联网领域称为测点,时序库中每一个测点占一列,而列中值就是采集量,类比MySQL中表的字段值。

标签

标签是指附着在传感器、设备或其他类型采集点上的静态属性,这些属性不会随时间发生变化,例如设备型号、颜色、设备所在地等。

在我理解标签也类比MySQL中表的字段值,只不过这一列的值同一设备时静态不变的值。

数据采集点

数据采集点是指在一定的预设时间周期内或受到特定事件触发时,负责采集物理量的硬件或软件设备。一个数据采集点可以同时采集一个或多个采集量,但这些采集量都是在同一时刻获取的,并拥有相同的时间戳。对于结构复杂的设备,通常会有多个数据采集点,每个数据采集点的采集周期可能各不相同,它们之间完全独立,互不干扰。

这里采集点也就是物联网业界称为测点,一个设备会有很多采集点。

超级表

TDengine 引入超级表(Super Table,简称为 STable)的概念。超级表是一种数据结构,它能够将某一特定类型的数据采集点聚集在一起,形成一张逻辑上的统一表

这里我理解超级表类比MySQL中视图的概念,不是具体的表,大家可以这样来理解这一概念。

时间戳​

时间戳在时序数据处理中扮演着至关重要的角色,特别是在应用程序需要从多个不同时区访问数据库时,这一问题变得更加复杂。

时间戳是时序数据库比较有代表性的的一个特性,时序数据库是为了处理时序数据这一目标而设计的,而时序数据的特点就是根据时间连贯性的变化。

这些概念大概就这么多,我们在接触TDEngine架构的时候还会接触到几个新概念:dnode、mnode、vnode、qnode,要理解这几个概念我们需要看一张架构图:

其中dnode是数据节点,mnode是管理节点,vnode是存储节点、qnode是查询节点。

了解清楚这些基础概念对我们整体理解TDEngine有很大的帮助。

二、基本操作

        上一节分析了一下TDEngine的核心概念,有了这些概念,我们需要实际去操作一下才能更好的理解。

        首先,我们需要部署安装实践环境,根据官方文档我们很容易搭建一个单机环境,部署集群环境比较复杂后续会出一篇文章来做讲解。搭建好数据库我们就需要建库、建表实践,之后去操作crud验证自己的理解。

创建数据库

创建一个数据库以存储电表数据的 SQL 如下:

CREATE DATABASE power PRECISION 'ms' KEEP 3650 DURATION 10 BUFFER 16;

根据上面这条SQL我们就可以创建一个数据库了,但是这里需要注意如果生产使用我们需要事先配置好建库的参数,这里有些参数建库之后无法修改,例如vgroup默认是2,开源版只有建库的时候可以设置。

创建超级表

创建一张名为 meters 的超级表的 SQL 如下:

CREATE STABLE meters (
    ts timestamp, 
    current float, 
    voltage int, 
    phase float
) TAGS (
    location varchar(64), 
    group_id int
);

创建表

通过超级表创建子表 d1001 的 SQL 如下:

CREATE TABLE d1001 
USING meters (
    location,
    group_id
) TAGS (
    "California.SanFrancisco", 
    2
);

创建好实践环境我们就可以解析crud实践了,这里有一个不同点需要理解一下,时序数据库主要是适用新增和查询操作,其中删除优先考虑通过设置KEEP参数来实现,KEEP 是该数据库的数据保留多长天数,缺省是 3650 天(10 年),数据库会自动删除超过时限的数据,而更新则可以通过写入重复时间戳的一条数据来更新时序数据,新写入的数据会替换旧值。

三、可视化管理工具

        日常管理数据库需要一款好用的可视化管理工具,这里推荐一款很好用的管理工具:

这个工具最大的优势是继承了市面上流行的数据库产品,实现了一个工具管理所有数据库的目标。

总结

        本篇文章目标在于助力初学者快速掌握TDEngine这一款物联网大数据平台,大家在学习过程中如果有疑问欢迎留言交流。

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

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

相关文章

【网络安全 | 渗透工具】Cencys+Shodan使用教程

原创文章,不得转载。 文章目录 Cencys准备语法全文搜索字段和值搜索通配符搜索布尔逻辑搜索嵌套搜索时间相关搜索范围搜索双引号 (")转义序列和保留字符Censys 搜索语言中的主机查询查看主机搜索结果Censys 搜索语言中的证书查询查看证书搜索结果生成报告其余Shodan准备使…

解决MongoDB创建用户报错command createUser requires authentication

1、执行创建用户报错如下: 2、解决方法 2.1 关闭 MongoDB /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongod.conf --shutdown 2.2 修改配置文件 vim /usr/local/mongodb/mongod.conf 将security.authorization值从enabled改为disabled 2.3 启动MongoD…

HTML/CSS/JS学习笔记 Day2(HTML--标签 上)

跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day2 内容梳理:…

redission中的锁分类

redis 分布式锁的核心命令 redis分布式锁的实现主要是依靠setnx和expire两个命令完成。 注意:由于setnx和expire是两个命令,会存在如果 setnx 是成功的,但是 expire 设置失败,一旦出现了释放锁失败,或 者没有手工释放…

用华为智驾,开启MPV的下半场

作者 |老缅 编辑 |德新 8月28日,岚图正式对外公布了全球首款搭载华为乾崑智驾和鸿蒙座舱的MPV——全新岚图梦想家。 新车定位「全景豪华科技旗舰MPV」,全系标配四驱,分为四驱鲲鹏版和四驱乾崑版。 其中岚图逍遥座舱和鲲鹏智驾构成的鲲鹏版…

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片,视频,摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面(GUI)以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测,并估算目标的距离。通过…

【Java】基于JWT+Token实现完整登入功能(实操)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 认识依赖4.2 使用JWT4.3 登入实现4.4 配置拦截器4.5 获取数据 五、总结&…

Unity数据持久化 之 使用Excel.DLL读写Excel表格

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ 终于找到一个比较方便容易读表的方式了,以前用json读写excel转的cvs格式文件我怎么使用怎么别扭&#xf…

合宙4G模组Air780EX——产品规格书

Air780EX 是合宙通信推出的LTE Cat.1 bis通信模块; Air780EX采用移芯EC618平台,支持LTE 3GPP Rel.13 技术; Air780EX 是4G全网通模块,可适应不同的运营商和产品,确保产品设计的最大灵活性。 其主要特点和优势可以总…

(一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别

🍂1、不说废话,现象展示 🍃图片识别 🍃视频识别 自己训练样本 十分简易快速 opencv级联ha

个股场外期权怎么交易?场外期权交易流程是怎样的?

今天带你了解个股场外期权怎么交易?场外期权交易流程是怎样的?个股场外期权是一种非标准化的期权合约,通常在场外市场(OTC市场)由金融机构和投资者之间进行交易。 场外个股期权主要功能 风险管理: 帮助投…

太速科技-基于Kintex-7 XC7K325T的FMC USB3.0四路光纤数据转发卡

基于Kintex-7 XC7K325T的FMC USB3.0四路光纤数据转发卡 一、板卡概述   本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持64bit DDR3容量2GByte,USB3.0接口,HPC的FMC连接器&#xff…

安卓玩机工具-----通用安卓玩机工具 “搞机助手”界面预览 推荐

在网络中有很多很好玩的工具。方便安卓机型联机使用各种功能。系列博文将详细的演示有些工具的特点与使用方法 搞机助手 作者:流水断崖 目前开发功能有:Twrp recovery全自动刷机,免Root冻结、卸载预装软件,免Root激活&#xff…

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel np.ones((3, 3), np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image cv2.dilate(binary_image, kernel, iterations1) 三、运行现象 四、完整代码 五、完整工程贴出 一、提前准备 …

【vue css】background设置背景图片不显示问题

问题: 如上图所示,添加背景图片页面没有显示 解决: 添加background-position: center center 即可显示 但是不知道为什么添加这个属性就可以,求大神解惑

端口安全老化细节

我们都知道port-security aging-time命令用来配置端口安全动态MAC地址的老化时间,但是后面还可以加上类型: [SW1-GigabitEthernet0/0/1]port-security aging-time 5 type absolute Absolute time 绝对老化 inactivity Inactivity time相对老化 …

网络协议-SSH

SSH(Secure Shell)协议是一种广泛使用的网络协议,用于安全地进行远程登录和数据传输。SSH协议通过加密技术保证了数据的安全性,防止数据在传输过程中被窃听、篡改或伪造。SSH协议的通信认证过程主要包括以下几个步骤: …

JRebel and XRebel离线安装

近期,使用JRebel and XRebel,发现总是安装不上,可能是网络的原因吧。所以就使用离线方式进行安装。 JRebel 是一款用于 Java 开发的生产力工具。它的主要功能是加速开发周期,通过在不重启 JVM 的情况下即时加载代码变更。这样&…

Class3——Esp32|Thonny——网络连接主机-wifi连接(源代码带教程)

废话不多说——直接上配置源码和图片 一.电脑连接到wifi上(不能是5G) 二.网络调试助手信息设置绑定 1.获取电脑wifi信息 2.设置网络调试助手为一致,然后打开,主机地址是上面的192.168.2.149端口自己设置,UDP然后打开…

1-7 掩膜的运用 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 num_pixels np.sum(mask 255) contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) c max(contours, keycv2.contourArea) x, y, w, h cv2.boundingRect(c) M cv2.moments(contours[0]) if contours…