新闻中心

PRESS CENTER 纵横智控
你的位置: 首页 新闻 行业资讯
纵横智控

时序数据库与关系数据库的区别,边缘计算网关如何读写时序数据库InfluxDB?

2024-04-26 10:50:54 阅读: 发布人:纵横智控

随着大数据时代的来临,各种类型的数据处理和存储需求应运而生,其中一个关键技术就是数据库。数据库主要分为关系型数据库和非关系型数据库,大家所熟悉的数据库中,Oracle、MySQL和Microsoft SQL Server都属于关系型 ,可以被应用于绝大多数场景。但是在物联网(IoT)领域中,就需要用到非关系型数据库中的时序数据库,全称时间序列数据库。与传统的关系型数据库相比,时序数据库在设计和优化上都有其独特之处,其中的典型当属InfluxDB时序数据库。

首先,从数据模型上来看,MySQL数据模型基于关系代数和关系理论,以表格的形式组织数据,并通过SQL语言进行数据操作。而时序数据库则专注于处理时间序列数据,其数据模型往往针对时间序列的特性进行设计,如时间戳、数据点等。这种数据模型更适合处理具有时间序列特性的数据,能够提供更为高效的数据存储和查询性能。

其次,从查询性能上来看,MySQL的查询性能虽然经过优化,但在处理大规模时间序列数据时,其性能可能会受到一定的限制。而时序数据库则通过针对时间序列数据的特性进行优化,如采用列式存储、分区技术等,使得其查询性能在处理大规模时间序列数据时更为出色。

此外,从扩展性上来看,MySQL作为一种传统的关系型数据库,其扩展性相对有限,特别是在处理大规模并发读写时,其性能可能会受到较大的影响。而时序数据库则通过分布式架构设计,能够更好地支持大规模并发读写,具有更好的扩展性。


influxDB和关系数据库(如:MySQL)区别:


influxDB


传统数据库概念

database

数据库

measurement

数据库中的表

points

time

每行记录都有一列time,主索引,记录时间戳,单位纳秒

fields

普通列,key-value结构,value数据支持多种数据类型(float、integer、string、boolean)

tags

索引列,key-value结构,value数据类型只支持string

Retention policy

数据保留策略,可以定义数据保留的时长,每个数据库可以有多个数据保留策略,但只能有一个默认策略


了解了它两的区别后,让我们一起来看看在物联网应用中边缘计算网关是如何与时序数据库做对接的吧!


想要对接时序数据库influxDB,首先需要在EG8200边缘计算网关插入SD卡,会自动安装influxDB数据库,并自动存储在SD卡内。如果未插入SD卡,则无法创建本地influxDB数据库,读写时序数据库节点自然也就无法使用。但是可以和远端的influxDB数据库通信,例如局域网内有influxDB数据库。


Tips: 

在插入新数据时,tags、fields和time之间用空格分隔;

fields和tags的key严格区分大小写


1.读时序数据库influxDB

输入

msg.query
#查询语句,如果配置页面没有设定查询语句,必须使用该属性携带查询语句

输出

msg.payload
#查询结果

示例

1. 保留策略

创建保留策略CREATE RETENTION POLICY "<policy_name>" ON "<database_name>" DURATION <duration> REPLICATION <replication_factor> [SHARD DURATION <shard_duration>]

<policy_name>:保留策略的名称

<database_name>:要应用保留策略的数据库名称

<duration>:数据的保留期限,例如1d表示一天

<replication_factor>:数据的复制因子,指定数据在集群中的副本数量

<shard_duration>:可选,如果要自定义分片持续时间,则可以指定分片的持续时间

例如:CREATE RETENTION POLICY "2_hours" ON "mydb" DURATION 2h REPLICATION 1 DEFAULT

修改保留策略ALTER RETENTION POLICY "<policy_name>" ON "<database_name>" DURATION <duration> REPLICATION <replication_factor> [SHARD DURATION <shard_duration>]

例如:ALTER RETENTION POLICY "2_hours" ON "mydb" DURATION 4h DEFAULT

删除保留策略DROP RETENTION POLICY "<policy_name>" ON "<database_name>"

例如:DROP RETENTION POLICY "2_hours" ON "mydb"

查看保留策略SHOW RETENTION POLICY ON "<database_name>"

例如:SHOW RETENTION POLICIES ON "mydb"

边缘计算网关/物联网平台/网关模块/纵横智控

2. 常用指令

创建数据库create database myTestDB

删除数据库drop database myTestDB

查看所有的表show measurements

创建表:influxDB中没有显式的新建表的语句,写入数据即建立新表,详见写时序数据库

删除表drop measurements tableTset

查看某个表的数据select * from tableTset

查看所有的tagshow tag keys from tableTset

查看所有的fieldshow field keys from tableTset

条件查询select * from tableTset WHERE model = 'IOTRouter'

时间查询select * from tableTset WHERE time > now() - 5m

边缘计算网关/物联网平台/网关模块/纵横智控


2.写时序数据库influxDB

输入

msg.payload
#如果数据类型是string|number|boolean,则msg.payload将作为单独的值写入指定的measurement中,此时没有fields和tags
#如果是一个包含了多个属性的对象,那么将按fields写入到measurement中
#如果是一个包含了2个对象的数组,那么第一个对象作为fields写入,第二个对象作为tags写入
#如果是一个包含了多个数组的数组,那么将写入多条数据

msg.measurement
#如果未在节点中配置measurement,那么需在发送的数据中携带msg.measurement属性来指定measurement

输出

#无输出口

功能

版本:本地influxDB版本1.6,请选择1.x
HOST:127.0.0.1
Port:8086
Database:自定义
用户名:默认为空
密码:默认为空

Measurement:自定义

示例

1. 如果msg.payload数据类型是string|number|boolean

msg.payload数据类型是string,存储的内容为"myvalue",多次点击注入将数据写入数据库。然后查询数据库,观察数据存储情况:只有time和value两个字段

2. 如果msg.payload是一个包含了多个属性的对象

msg.payload是一个包含了多个属性的对象{"T":32,"H":54},T是温度,H是湿度。点击注入一次将数据写入数据库。然后查询数据库,观察数据存储情况:每条数据多了T和H两个KEY,之前已经存在的数据没有值。新增的T和H都属于fields,不建议使用索引。

3. 如果msg.payload是一个包含了2个对象的数组

msg.payload是一个包含了2个对象的数组[{"T":32,"H":54},{"model":"IOTRouter"}],第一个对象是fields,第二个对象是tags。点击注入一次将数据写入数据库。然后查询数据库,观察数据存储情况。

4. 如果msg.payload是一个包含了多个数组的数组

msg.payload是一个包含了多个数组的数组[[{"T":32,"H":54},{"model":"EG8000"}],[{"T":32,"H":54},{"model":"EG8100"}],[{"T":32,"H":54},{"model":"EG8200"}]],简单理解为一次注入多个示例3,即一次性写入多条数据。点击注入一次将数据写入数据库。然后查询数据库,观察数据存储情况。


本文摘自《EG系列边缘计算网关-节点介绍-存储节点,详情请参看原文


热门产品