使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(2)

简介: Apache IoTDB中常见的数据模型和术语有设备、传感器、存储组、路径等等

使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(2)
Apache IoTDB中常见的数据模型和术语
image.png

通过上图我们可以非常清楚的了解到属性的覆盖范围和它们之间的隶属关系,并且根据属性的覆盖范围和它们之间的隶属关系,将其表达为属性层次结构。其层次关系为:power group layer - power plant layer - device layer - sensor layer。其中,ROOT是根节点,传感器层的每个节点称为一个叶节点。在使用IoTDB的过程中,可以用“.”直接连接从根节点到每个叶节点的路径上的属性,从而形成了IoTDB中一个timeseries的名称。例如,图中最左边的路径可以生成一个名为ROOT.ln.wf01.wt01.status 的路径。

1.属性层次结构
在获得时间序列的名称后,大家就需要根据数据的实际场景和规模来设置存储组。在一般场景下,数据通常是以组为单位到达的(即数据可能跨越电场和设备),为了避免写数据时频繁切换io,也为了满足用户对以组为单位的数据进行物理隔离的要求,可以在组层设置存储组。

接下来我给大家介绍几个IoTDB中涉及的模型的基本概念:

设备
设备是真实场景中装备有传感器的装置。在IoTDB中,所有的传感器都应该有相应的设备。

传感器
传感器是实际场景中的检测设备,能够感知待测信息,并将感知到的信息转换成电信号或其他所需形式的信息输出,并发送给IoTDB。在IoTDB中,所有存储的数据和路径都以传感器为单位进行组织。

存储组
存储组用于让用户定义如何组织和隔离磁盘上不同的时间序列数据。属于同一存储组的时间序列将被连续写入相应文件夹中的同一文件。该文件可能由于用户命令或系统策略而关闭,因此来自这些传感器的下一个数据将存储在同一文件夹的新文件中。属于不同存储组的时间序列存储在不同的文件夹中。

用户可以将任何前缀路径设置为存储组。假设有四个时间序列root.vehicle.d1.s1, root.vehicle.d1.s2, root.vehicle.d2.s1, root.vehicle.d2.s2,两个设备d1和d2在小路下面root.vehicle可能属于同一个车主或者同一个厂家,所以d1和d2关系密切。此时,可以将前缀path root.vehicle指定为一个存储组,这将使IoTDB能够将其下的所有设备存储在同一个文件夹中。下新添加的设备root.vehicle也将属于该存储组。

其中完整路径(root.vehicle.d1.s1如上例所示)不允许设置为存储组。

设置合理数量的存储组可以带来性能的提升:既不会因为存储文件或文件夹过多而导致IO频繁切换,也不会因为占用大量内存,导致内存文件频繁切换而导致系统变慢,也不会因为存储文件或文件夹过少而导致写命令阻塞,起到降低并发的作用。

用户应该根据自己的数据大小和使用场景来平衡存储文件的存储组设置,以获得更好的系统性能。(大家如果对于存储组设置非常感兴趣的话,可以自己查询一下官方提供的存储组规模和性能测试报告)。

其中时间序列的前缀必须属于一个存储组。在创建时间序列之前,用户必须设置该序列属于哪个存储组。只有设置了存储组的时间序列才能保存到磁盘上。

一旦前缀路径被设置为存储组,就不能更改存储组设置。设置存储组后,不允许再次设置相应前缀路径的所有父层和子层(例如,在root.ln设置为存储组、根层和root.ln.wf01不允许设置为存储组。

路径
在IoTDB中,路径是符合以下约束的表达式:

path: LayerName (DOT LayerName)+
LayerName: Identifier | STAR

我们称两条路径之间的中间部分为“.”作为一个层,因此root.A.B.C是一条有四层的路径。

值得注意的是,在路径中,root是一个保留字符,只允许出现在下面提到的时间序列的开头。如果root出现在其他层中,则无法对其进行解析并报告错误。

时间序列路径
timeseries路径是IoTDB中的核心概念。时间序列路径可以被认为是产生时间序列数据的传感器的完整路径。IoTDB中的所有时间序列路径必须以root开始,以传感器结束。时间序列路径也可以称为完整路径。

例如,如果车辆类型的设备1有一个名为sensor1的传感器,则其时间序列路径可表示为:root.vehicle.device1.sensor1.

其中当前IoTDB支持的timeseries路径的层数必须大于等于四层(以后会改为两层)。

前缀路径
前缀路径是指timeseries路径的前缀所在的路径。前缀路径包含以该路径为前缀的所有时间序列路径。例如,假设我们有三个传感器:root.vehicle.device1.sensor1, root.vehicle.device1.sensor2, root.vehicle.device2.sensor1,前缀路径root.vehicle.device1包含两个时间序列路径root.vehicle.device1.sensor1和root.vehicle.device1.sensor,期间root.vehicle.device2.sensor1被排除在外。

带星形的路径
为了更方便快捷地表示多个时序路径或前缀路径,IoTDB为用户提供了路径指针。可以出现在路径的任何一层。根据所处的位置出现时,带有星号的路径可以分为两种类型:

*出现在路径的末端;

*出现在路径中间;

出现在路径的末尾的时候,它表示()+,它是一层或多层。举个例子,root.vehicle.device1.表示所有前缀为root.vehicle.device1层数大于或等于4层,如root.vehicle.device1.,root.vehicle.device1.., root.vehicle.device1...等。

当...的时候出现在路径的中间,它代表本身,即一层。举个例子,root.vehicle.*.sensor1表示前缀为的4层路径root.vehicle后缀是sensor1。

在这里我们应该注意:

*不能放在路径的开头。
路径包含与前缀路径具有相同的含义,例如,root.vehicle.和root.vehicle是一样的。
时间戳
时间戳是产生数据的时间点。它包括绝对时间戳和相对时间戳

绝对时间戳
IoTDB中的绝对时间戳分为LONG和DATETIME两种(包括DATETIME-INPUT和DATETIME-DISPLAY)。当用户输入时间戳时,他可以使用长类型时间戳或日期时间输入类型时间戳,日期时间输入类型时间戳支持的格式如下表所示:

*日期时间输入类型时间戳的支持格式 *

image.png

这次先给大家介绍到这里,下次再来给小伙伴们介绍时间戳和相对时间戳的数据格式~

目录
打赏
0
0
0
0
113
分享
相关文章
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
57 1
|
22天前
|
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
77 5
体育赛事即时比分 分析页面的开发技术架构与实现细节
本文基于“体育即时比分系统”开发经验总结,分享技术实现细节。系统通过后端(ThinkPHP)、前端(Vue.js)、移动端(Android/iOS)协同工作,解决实时比分更新、赔率同步及赛事分析展示等问题。前端采用 Vue.js 结合 WebSocket 实现数据推送,提升用户体验;后端提供 API 支持比赛数据调用;移动端分别使用 Java 和 Objective-C 实现跨平台功能。代码示例涵盖比赛分析页面、API 接口及移动端数据加载逻辑,为同类项目开发提供参考。
布谷直播系统源码开发实战:从架构设计到性能优化
作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
130 7
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
476 33
The Past, Present and Future of Apache Flink
Apache Flink 2.0.0: 实时数据处理的新纪元
Apache Flink 2.0.0 正式发布!这是自 Flink 1.0 发布九年以来的首次重大更新,凝聚了社区两年的努力。此版本引入分离式状态管理、物化表、流批统一等创新功能,优化云原生环境下的资源利用与性能表现,并强化了对人工智能工作流的支持。同时,Flink 2.0 对 API 和配置进行了全面清理,移除了过时组件,为未来的发展奠定了坚实基础。感谢 165 位贡献者的辛勤付出,共同推动实时计算进入新纪元!
165 1
Apache Flink 2.0.0: 实时数据处理的新纪元

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等