基于图数据库的物联网模型(1)-图数据库与模型设计

29 篇文章 17 订阅

     物联网的图模型

      所谓“物联网”是指规模巨大的设备,传感器将实现联网,通过这些联网设备来收集数据,存储和分析,并且和人员,应用软件产生的数据相互关联,实现处理复杂的事件的最优化。基于更快地使用更多数据来提供比以前更好的结果。

     以滴滴打车为例,它是通过收集、整理、存储和处理来自运行其应用程序的大量智能手机的数据而实现的“智能服务”。 这些手机充当物联网设备,可以感知客户和出租车司机的位置,并与交通流量、天气和其他活动的数据混合在一起。提供了比传统的出租车呼叫中心更佳的客户服务。

     摩根士丹利最近预测,在未来五年内,全球将有大约 750 亿台联网设备投入使用。这个数字正在迅速接近人脑中估计的860亿个神经元。正如人类智能不是由我们大脑中的神经元数量产生的,而是由它们之间 100 万亿个左右的连接产生的一样,物联网的价值主要体现在这些设备的连接关系交互

   我们以一个学校的建筑管理系统为例,一个学校有教学楼,科研楼,学生宿舍,图书馆,食堂等许多的建筑。这些建筑中有许多的楼层和房间,在这些房间中有空调,灯具和教学实验仪器。为了实现建筑自动化管理和能耗管理,学校会在许多的地方安装计量电表,遥控开关,以及温度,照度传感器。这是一个十分复杂的物理设备网络。与此同时,从学校的行政管理的角度看,某一个大楼,或者实验室,宿舍又可能属于某一个系,某个班级,甚至某一个项目组,或者学生社团。

   当我们着手来构建一个大学的建筑自动化能耗系统时,我们通常会在白板上画出物理设备和建筑物的隶属关系和网络连接方式。这是相对比较直观和简单的。进一步地,我们要搞清楚设备以及教室与学校部门,学生,教师之间的隶属关系。于是,如果我们将设备,部门,学生,教师都抽象称为一个圆圈(我们称为节点node)。而将两个圆圈之间如果有直接的隶属关系,就会发现,学校的建筑自动化、能耗管理物联网变成了一个有圆圈和直线构成的图。节点之间的关系在构建物联网过程中非常重要。

   另一方面,物联网将会产生大量的实时数据。它们之间是存在相互关系的。我们称数据之间的相互关系为“数据脉络”(data context,我喜欢这个中文术语!),当物联网中产生的数据存储在抽象的图节点中(下面我们指出,这些数据称为该节点的属性Property)。图能够充分地反映数据的脉络。

      你可以自己去分析各自物联网,能够发现最后都能够抽象成为一张类似与上面的图。所以我们可以认为物联网就是一个图。如果我们采用图模型来构建物联网架构,存储,分析数据,实现设备交互,能使物联网的逻辑结构更加清晰。并且带来如下好处。

  •      反映应用场景的数据脉络,适合数据分析和各种基于图论的算法。
  •     数据查询的效率要比普通数据表的方式更高。

       在普通的数据库中,如果数据是巨量的,那么查询的时间会越来糟糕。而图模型中,往往是通过链接关系,查询关联数据,所以它的查询数据的时间基本是恒定的。

  •    系统设计更加符合设计师的思维过程

        根据应用场景中各种设备之间的逻辑关系构建,更新数据模型。使系统设计更符合基于模型的设计方式。事实上,人们称图数据模型是一种“白板友好”的模型。也就是说,它直接反映的设计师在白板上画的结构图。大大提高了系统设计的效率。

  •    有助于实现物联网的标准化

  至少到目前为止,物联网应用的标准化工作进展缓慢。

图模型的几个要素

  • 节点(Nodes)
  • 关系(Relationship)
  • 属性(Property)可以定义在节点和关系上
  • 标签(Label) 代表节点的类别。

图数据库(neo4J)

       图数据库是图模型数据的数据库。它的数据建立,查询和修改都是以图的形式进行的。所以,要建立图模型的物联网需要使用图数据库。neo4j是目前最流行的开源图数据库。

neo4j 的架构如下图所示:

        从上图可见,数据库的管理,开发,应用程序接口,数据分析和商业使用都是基于图的。其内部的存储格式和算法也是面向图模型优化的。

图数据库与普通关系数据库的区别

普通的数据库大多数是所谓关系数据库(relation database),为什么不能用关系数据库来存储”关系“呢?其中关系数据库中的数据是通过大量的数据表格来存储数据,每个数据表中都有主键和外键。关系数据库通过主键-外键来建立数据之间的关系。

    当主键和外键是一对多关系时,当模型中出现多对多关系时,必须引入一个JOIN表(或关联实体表)来保存两个参与表的外键,进一步增加了join操作成本。下图显示了通过创建一个 Person-Department 连接表将一个人(来自 Person 表)连接到一个部门(在 Department 表中)的概念,该连接表在一列中包含人的 ID 和在列中包含相关部门的 ID。

正如您可能看到的那样,这使得理解连接非常麻烦,因为您必须知道人员 ID 和部门 ID 值(执行额外的查找以找到它们)才能知道哪个人连接到哪个部门。通常通过对数据进行非规范化以减少必要的连接数量来解决这些类型的成本高昂的连接操作,从而破坏关系数据库的数据完整性。

可以试想,如果数据的关系很复杂,数据非常巨大时,这种基于表格的关系表的查询是非常耗费计算时间和内存的。因此,图数据库的专家戏称关系数据库是”逆关系“的。”没关系“的。

 

图模型的建模方法

         图模型另一个重要的特点是可以实现面向对象的模型设计。实际上,在工业自动控制中 的OPC UA 协议中的信息模型同样采用了图形的模型来描述程序设计中的对象。

  比如一个传输系统中有两个电机。每个电机有转速,功率两个参数。

那么我们可以定义两个节点 -传输带和电机,电机节点中带有两个属性 转速和功率。

节点的粒度

  在实际建模过程中,我们可以在节点中定义许多的属性,也可以将节点分解成功更小的节点构建而成。具有许多属性的节点可能会造成数据的冗余。所以我们应该可能地将节点的存储颗粒分解的很细。这样表现力更强,支持更复杂的查询。

   在OPC UA 的信息标准中,有8种类型的节点

  •  对象节点
  •  变量节点
  • 方法节点
  • 视图节点
  • 对象类型节点
  • 引用类型节点
  • 变量类型节点
  • 数据类型节点

        一个对象使用一个节点来表示,如果该对象中拥有两个变量,那么就建立两个变量对象,然后对象节点和这两个变量类型节点之间建立了引用关系(reference relationship)。同样地,如果在一个对象中引用另一个对象,就需要定义被引用的对象,并与其建立引用关系。

   OPC UA 的信息模型的节点粒度是非常高的。

参考OPC UA 的信息模型

  我认为,在物联网系统建模时,可以参照OPC UA 的信息模型。一方面,OPC UA 信息模型基于面向对象程序设计概念,具有很强的物理设备建模能力,另一方面,OPC UA 已经提出了许多年,大量工业软件都支持OPC UA 协议。并且为许多物理设备建立了OPC UA 信息模块。在构建物联网信息模型是我们可以使用OPC UA 协议丰富的技术和模型经验。同时,也促进物联网技术的标准化。

事实上,我们完全可以将物联网看作一个巨大的OPC UA 服务器。而各种应用软件成为OPC UA 的Client 访问这个巨大的物联网。在这个巨大的物联网OPC UA 服务器内部采用图数据库建立巨大的OPC UA 信息模型。个人觉得这是一个大胆的想法。能够解决物联网标准缺失的问题。

利用neo4j建立OPC UA 的数据模型

neo4j 节点中,没有节点类型的属性,不过,标签起到了节点类型的作用。我们可以通过标签来区分不同的节点。

下面是一个例子,其中黄色的节点是对象类型,红色的类型是变量类型。REF 是节点之间的关系。我们建立了一个水泵的节点,它具有两个对象类型的属性,分别是位置(location) 和电机(motor1),对象location节点具有两个变量节点(variable node),它们是latitude和longitude。而电机具有两个变量节点(variable node),它们是speed和power。

这些节点通过引用关系REF 连接。    

 neo4j 的操作

节点的属性

基础属性(Basic property)

所有节点的都具有的属性。

名称 name

显示名称 dispayname

描述 Description 

变量节点附加属性 (Variable)

value  值

dataType 数据类型

accessLevel

userAccessLevel

dataPointer 时间序列数据库指针

方法(Method)节点的附加属性

 argument 方法的参数

实例 

下面我们通过一个实例来研究数据模型的描述方式。在这里我们定义的一个水泵,水泵的特征包括位置,电机。而位置又包括了经纬度。电机包括转速和功率。

1 建立一个对象(pump)

2 建立motor和location 对象节点,

3 建立 pump-REF-motor和pump-REF-location 的关系

4 建立变量节点 speed,power,longitude,latitude 四个变量节点

5 建立 motor1-REF-speed,motor1-REF-power ,locattion-REF-longitude,location-REF-latitude 四个关系。

于是形成了的图如下:

访问数据库的常用方法

neo4j 图数据库使用一种查询语言Cypher (Cypher Query Language CQL)来操控数据库。Cypher 使我们更容易地操控图数据库。

例如:建立两个节点 罗密欧 和朱丽叶(Person node),它们之间的关系(LOVES)是罗密欧爱朱丽叶。

CREATE (remeo:Person {name:"Remeo"})-[:LOVEE]->(juliet:Person(name:Juliet})

下面我们来建立水泵的图模型,它具有树形图结构

pump 
  motor
     speed
     power
  location
     longitude
     latitude

1 获取 pump1 的所有子节点

MATCH (:object {name: 'pump1'})-[REF]-(p)
RETURN p

2  获取 motor 的所有子节点

MATCH (:object {name: 'motor1'})-[REF]-(p)
RETURN p

3 获取location 的所有子节点

MATCH (:object {name: 'location'})-[REF]-(p)
RETURN p

4 如果节点的label 是variable 就不再有进一步的子节点。

数据模型的构建工具

开发一种基于图模型的构建工具十分重要,它既要考虑构建的效率,有要考虑使用者的习惯和方便。大致有下面几种方式

  •     树形目录结构。
  •     图方式
  •    文本方式(XML,JSON,CSV)

结束语

本文探讨图数据在物联网中应用的可能性,并且提出了使用OPC UA 信息模型来构建物联网信息模型,解决物联网标准缺失的问题。作者本人正在构建一个实验性小系统。感兴趣的读者可以一起交流。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
JetLinks开源物联网平台基于Java8、Spring Boot 2.x、WebFlux、Netty、Vert.x、Reactor等开发,是一个开箱即用,可二次开发的企业级物联网基础平台。平台实现了物联网相关的众多基础功能,能帮助你快速建立物联网相关业务系统。 JetLinks开源物联网平台核心特性: 支持统一物模型管理,多种设备,多种厂家,统一管理。 统一设备连接管理,多协议适配(TCP、MQTT、UDP、CoAP、HTTP等),屏蔽网络编程复杂性,灵活接入不同厂家不同协议的设备。 灵活的规则引擎,设备告警,消息通知,数据转发。可基于SQL进行复杂的数据处理逻辑。 地理位置:统一管理地理位置信息,支持区域搜索。 数据可视化:实现拖拽配置数据表,设备组态等。 JetLinks开源物联网平台技术栈: Spring Boot 2.2.x Spring WebFlux 响应式Web支持 R2DBC 响应式关系型数据库驱动 Project Reactor 响应式编程框架 Netty、Vert.x 高性能网络编程框架 ElasticSearch 全文检索,日志,时序数据存储 PostgreSQL 业务功能数据管理 hsweb framework 4 业务功能基础框架     JetLinks开源物联网平台 更新日志: v1.9 1、增加设备独立物模型支持,可给单独的设备配置物模型. 2、基本实现GB28181国标视频设备接入,支持直播,云台控制,级联操作.(选配模块) 3、RabbitMQ增加routeKey配置,可在配置文件中指定device.message.writer.rabbitmq.consumer-route-key和device.message.writer.rabbitmq.producer-route-key.(Pro) 4、当设置了device.message.writer.rabbitmq.consumer=false时,不创建MQ消费者.(Pro) 5、设备支持独立物模型,可单独配置设备的物模型. 6、适配tdengine 2.0.16.0,优化sql长度策略. (pro) 7、优化规则引擎编辑器,实现组件模块化动态加载.(Pro) 8、修复启动服务时,如果某个产品物模型发布失败,导致后面的产品终止发布的问题. 9、增加ignoreLatest消息头,message.addHeader("ignoreLatest",true) 忽略记录最新数据到数据库. 10、修复租户下操作设备告警提示无权限.(Pro) 11、优化租户在解绑成员时,同时解绑成员的资产信息.(Pro) 12、优化子设备消息回复处理 13、物模型属性增加存储方式功能,可配置部分属性不存储. 14、增加虚拟属性功能,可通过规则来计算出虚拟属性值.(Pro) 15、增加租户成员绑定(TenantMemberBindEvent),解绑(TenantMemberUnBindEvent)事件.可通过spring-event订阅处理此事件.(Pro) 16、优化子设备状态检查,当检查子设备状态时,将会尝试发送ChildDeviceMessage<DeviceStateCheckMessage>给网关,处理后返回ChildDeviceMessageReply<DeviceStateCheckMessageReply>. 17、增加ClickHouse设备数据存储策略支持.(Pro) 18、增加权限过滤功能,可配置禁止赋予自己没有的权限给其他用户.hsweb.permission.filter相关配置 19、设备和产品的租户绑定逻辑优化: 绑定设备时,自动绑定产品.解绑产品时,自动解绑设备.(Pro) 20、用户管理增加租户权限控制.(Pro) 21、当向keepOnline的设备发送消息时,如果原始连接已断开,将返回CONNECTION_LOST错误. 22、设置keepOnline的会话将被持久化,重启服务后自动恢复.(Pro) 23、默认关闭设备最新数据存储,通过jetlinks.device.storage.enable-last-data-in-db=true开启.(Pro) 24、属性物模型增加属性值来源,配置为手动时,在发送修改属性指令(WritePropertyMessage)时,将直接生效,不会发送到设备. 25、优化租户资产解绑逻辑,当删除数据时,解绑资产全部的绑定关系.(Pro) 26、用户管理,机构管理增加租户端支持,租户可以自己管理自己的用户和机构.(Pro)
【资源说明】 基于Django和python实现的流量检测模型系统源码+项目说明.zip `data_cut/`存放按照五元组切割后的流量样本 `data_raw/`存放流量收集来的原始样本 `feature_extract/`存放特征提取后的训练和测试样本 `flow_cut/`按照五元组切割流量样本模块 `flow_collect/`采集流量模块 `model_train/`模型训练模块 `model_test/`模型测试模块 `result_show/`结果展示模块 `flow_system/`配置模块 `home`主页模块 `requirement.txt`配置要求 `manage.py`django主要运行程序 ## Data `data_raw`存放流量收集来的原始样本 `data_cut`存放按照五元组切割后的流量样本,其中`flow/`存放普通流量,`tls/`存放加密流量 `feature_extract/`存放特征提取后的特征,其中`image/`存放片特征,`flow/`存放流级特征,`tls/`存放加密特征,详细命名规则请看每个文件夹中的readme.txt ## Model VMT HAE WVM ## Model_save `model_save/`存放WVM训练好模型 `modelSaved/`存放VMT和HAE训练好模型 ## Settings `flow_system/settings`中,`DATABASES`设置数据库账号与密码,默认数据库为mysql ## Use `python manage.py migrate flow_cut`建立数据库标项 `python manage.py migrate flow_collect`建立数据库标项 `python manage.py migrate feature_extract`建立数据库标项 `python manage.py migrate model_test`建立数据库标项 `python manage.py makemigrations`保存数据库变动 `python manage.py runserver`运行本地服务器 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值