ignition中的数据库

4,205 阅读7分钟

前言

在ignition的模块化架构中,提供了与数据库功能相关的SQL Bridge模块,但是ignition中和数据库相关联的技术并不少,通过ignition提供的数据库相关的功能,ignition项目和数据库交互是很轻松和方便的,毕竟封装程度高,相对于Java中的Mybaits和Hibernate等ORM框架来说更加便利。

ignition在以下的技术上可以全面实现对数据库的相关操作。

  1. 数据库驱动和连接
  2. 数据库连接的查看和使用
  3. Datasource Query Browser
  4. Named Query
  5. Query Binding
  6. Tag History
  7. Scripting
  8. 其他:Reporting、Alarming Journal等

数据库驱动和连接

在ignition中,支持以下数据库:MySQL、MariaDB、Oracle、SQL Server、SQLite、PostgreSQL、FireBird、IDM DB2。其中,MariaDB和MySQL用的都是MySQL的驱动,其他数据库都有其对应的驱动。下图展示了ignition的数据库驱动和连接的目录。

directory.png

连接数据库之前需要先配置对应的数据库驱动,驱动配置页如下图所示::

driverConfig.png 选择对应的驱动并匹配和设置相关的属性即可完成数据库驱动的配置,配置好数据库驱动后在建立数据库连接时,选择要建立的对应的数据库连接后,可以配置数据库驱动和该数据库连接的相关信息。部分信息可以不用配置也能完成数据库连接的配置,但是像数据库用户名、密码和驱动等连接信息是必须要配置的,否则无法建立数据库连接,数据库连接部分配置信息如下图所示:

DBConnectionConfig.png

数据库连接的查看和使用

数据库连接的查看和使用在网关和项目中都提供了对应的窗口和技术,下面分别从网关和项目二个层面来看看数据库连接的查看和使用。

网关层面

ignition中可以配置多个数据库驱动,并且同时配置多个数据库连接,并且都能在项目中使用。 在网关的如下目录中可以配置项目的默认数据库连接,这样在项目中使用时,如果没有指定数据库连接都会默认使用以下的数据库连接来执行对数据库的相关操作。

DBConnectionConfig1.pngDBConnectionConfig2.png

同时,在如下目录找到对应的数据库连接点击“Details”可以查看数据库连接的相关信息,包括该数据库连接有多少连接、该数据库连接每秒执行的SQL数量及其最近执行的SQL信息,在执行的SQL的相关信息下可以看到执行SQL使用的时间,在配置数据库连接时可以设置慢查询的阈值,如果SQL执行时间超过了阈值,则该SQL也同样会被记录下来。

databases.pngdatabasesState.png

项目层面

项目开发时可以在“project property editor”中修改该项目使用的默认数据库连接,该数据库连接的配置与网关中设置的该项目的默认数据库连接保持同步。在开发项目时,直接在项目中的数据库连接修改会便利很多。

projectDBConfig.png

Datasource Query Browser

Datasource Query Browser在项目开发界面菜单栏中Tools > Datasource Query Browser可以找到并打开相关的界面。Datasource Query Browser是ignition内置的数据库工具,在Datasource Query Browser中可以选择对应的数据库连接,并且可视化的查看该数据库连接的数据库、数据表和具体的表结构信息。同时,在输入框中支持直接编写SQL语句对数据库进行增删改查。如果没有选择对应的数据库连接,则使用项目和网关中设置的默认数据库连接进行相关操作。修改对应的数据库连接后,点击旁边的刷新按钮可以刷新并查看新数据库连接的数据库信息和表信息。

DatasourceQueryBrowser.png

Named Query

Named Query存在于项目开发界面中,Named Query的作用是参数化SQL语句,类似于Java中Dao层使用的ORM框架。Java中写Mapper时,通常需要参数化SQL语句进行查询数据库,Named Query也是同样的功能。Named Query在使用Query Bingding时可以直接调用对应的Named Query,在写Scripting时,也可以直接调用Named Query进行使用,同时ignition配置了system.db.runNamedQuery函数来直接对Named Query中设置的语句进行调用。

Named Query的配置

下图为Named Query的创建页面,创建时可以选择三种Named Query语句,如下图,三种类型分别Blank Query(空白查询)、Select Query、Update Query。Blank Query适用于所有类型,Select Query和Update Query分别用于查询和增删改。输入框中输入的内容即对该条Named Query的命名,所有对该条Named Query的调用都匹配该名字。

CreateQuery.png 下图为Named Query的Authoring配置页面,可以选择数据库连接(没有选择则使用默认数据库连接)、选择Query类型(等同于Blank、Select、Update)、配置参数和参数化SQL语句。在Named Query中setting页面可以配置该Named Query适用的Security Zone,而Testing则可以对配置的参数化SQL语句进行测试查看实际效果,方便更改和配置该Named Query。

Named Query.png

Query Bingding

Query Binding是binding中的一种类型,在给组件和点位添加binding时选择Query就是Query Binding。在Perspective中的Query Binding与Named Query中组合使用。下图中,点击Path输入框尾部的搜索按钮可以查看并选择Query Binding所使用的Named Query进行绑定。“Return Format”控制该SQL语句查询后返回的数据的格式,可以选择JSON、Dateset、Scalar三种格式返回查询数据,其中Auto是自动判断返回数据的格式。选择了对应的Named Query后,下方会显示传入的参数和SQL语句。options、Transform、Binding Preview都是Binding中的通用项,鼠标悬停在选项上方时会出现提示,根据需求选择是否勾选。

需要提一下的是Binding Preview不同显示内容的含义:如果SQL及其参数、Transform都没有异常的情况下,下面显示的是正常数据(没有报错,显示了结果,并不证明结果会一定正确)。如果SQL及其参数配置错误,有异常的话会显示Error_Configuration。如果SQL及其参数配置正确,但是Transform时出现了不匹配的结果和异常时就会显示Error_ScriptEval。如果是图中所示情况即代表SQL或者其参数配置出错,但是Transform却正确转换出了一个0行0列的dataset,这个也是属于异常,因为该Transform中编写的代码根据你SQL获取到的数据转换为dataset,并没有做 判空和健壮性等的操作,Transform转换的是一个空数据,自然就是0行0列的dataset了。

BindingQuery.png

Tag History

数据库在ignition中也作为历史数据查询,通过设置点位的“History”属性,可以将该点位的数据实时存入数据库,一段时间后,这些存储的数据就成为了历史数据,通过报表查询数据库就可以展示历史数据。设置“history enabled”属性为true,开启历史数据,下面可以设置Deaband Style和Mode等数据存入数据库的规则。Deaband Style有二种:Discrete离散量和Analog模拟量。Discrete:新值(V1)将仅在以下情况下存储:|V1-V0| >=Historic Deadband。Analog:每次标签的值发生变化时,会使用存储在内存中的斜率值计算上斜值和下斜值来确定是否存储。采样模式sample mode可以选择on change、Periodic、Tag Gruop,分别代表点位值改变时取样、定时取样和基于Tag Group取样。

TagHistory.png

Scripting

ignition中封装了很多的DB相关的函数,如下图截取的部分DB函数:

db1.png

这些函数可以在Scripting、Transform、Gateway Events、Client Events、Tag Evnent等编写脚本代码的地方进行使用,但是使用时需要注意的是各个函数的作用域。具体的函数参数和使用规定在system function中的db函数内都有描述,在菜单栏Toos > Script Console中,通过“system.db.”也可以查看相关函数及其描述。

其他:Reporting、Alarming Journal等

Reporting中可以设置数据源和数据库,设置SQL参数和Script代码也可以直接从数据库中拉取历史数据形成报表。 Alarming Notification中通过设置点位的报警配置和信息后,可以将报警日志存储在数据库中,同时Alarm journal中也存储了历史的报警日志数据信息。