一种基于观察者模式的实时数据库实时数据发布方法技术领域
本发明涉及一种基于观察者模式的实时数据库实时数据发布方法,属于计
算机软件技术领域。
背景技术
实时数据库(RTDB-RealTimeDataBase)是数据库系统发展的一个分支,
是数据库技术结合实时处理技术产生的。实时数据库是电力,能源,化工等工
业控制场合所广泛采用的实时控制系统,数据采集与监视系统等系统的核心部
分,主要用于采集并管理来自各种采集设备的生产过程数据,并提供统一的实
时数据管理平台,通常做为企业信息化管理系统中的核心和中枢,是企业实现
从设备自动控制到高层计划管理的桥梁,承担着承上启下的作用。
实时数据库最重要的特性即是实时性,实时性包含数据的实时性和事务的
实时性。数据的实时性主要和现场采集装置,实时数据采集驱动模块的速度、
效率有关。事务实时性是指实时数据库对事务处理的实时能力,包括响应客户
端访问请求的速度,向客户端发布实时数据的速度等。其他性能主要包括支持
访问客户端数量,即并发访问性能;对系统资源的占用,即通讯的效率等方面。
现有技术中客户端实时获得快速变化的实时数据,需要频繁访问实时数据
库而占用较多服务器软硬件系统资源,加重系统通讯网络负担。
发明内容
为了解决上述技术问题,本发明提供了一种基于观察者模式的实时数据库
实时数据发布方法。
为了达到上述目的,本发明所采用的技术方案是:
一种基于观察者模式的实时数据库实时数据发布方法,基于服务器-客户端
的架构,采用2级订阅-发布机制,在服务器和客户端分别内置订阅-发布模块;
客户端的订阅-发布模块:负责管理客户端应用程序的订阅请求,可注册客
户端应用程序的订阅请求,在收到服务器的实时数据发布后,向注册的应用程
序发布其订阅的实时数据;
服务器的订阅-发布模块:负责管理客户端的订阅请求,可注册客户端的订
阅请求,在实时数据满足发布条件时,向注册的客户端发布其订阅的实时数据;
实时数据库实时数据发布过程为,
1)客户端应用程序向客户端的订阅-发布模块订阅实时数据;
2)客户端的订阅-发布模块接收并注册客户端应用程序的订阅请求,并向
服务器订阅实时数据;
3)服务器的订阅-发布模块接收并注册客户端的订阅请求;
4)在实时数据满足发布条件时,向订阅该实时数据的客户端发布;
5)客户端的订阅-发布模块接收到服务器发布的实时数据时,向客户端应
用程序发布订阅的实时数据。
客户端的订阅-发布模块通过散列表和链表数据结构管理订阅请求,其中,
散列表以被订阅数据的标签名为键值,以订阅该数据的客户端应用程序句柄链
表为值;
服务器的订阅-发布模块通过散列表和链表数据结构管理订阅请求,其中,
散列表以被订阅数据的标签名为键值,以订阅该数据的客户端信息链表为值。
客户端的订阅-发布模块接受到客户端应用程序的订阅请求时,在散列表中
查找该数据是否被订阅,如是则获得该数据对应的应用程序句柄链表,如果链
表中不存在该应用程序句柄,则将新的订阅请求的应用程序句柄加入到链表末
端;如果该数据未被订阅,则新建应用程序句柄链表,并在链表中加入该订阅
应用程序句柄,在散列表中新建被订阅数据的标签名和该链表的映射关系,同
时向服务器发送订阅请求;
服务器的订阅-发布模块在接收到客户端的订阅请求时,在散列表中查找该
数据是否被订阅,如是则获得该数据所对应的客户端信息链表;如果链表中不
存在该客户端信息,则将新的订阅请求客户端信息加入到链表末端;如果该数
据没有被订阅,则需新建客户端信息链表,并加入该客户端信息,在散列表中
新建被订阅数据的标签名和该链表的映射关系。
客户端的订阅-发布模块还可注销客户端应用程序的订阅请求,服务器的订
阅-发布模块还可注销客户端的订阅请求;
客户端的订阅-发布模块收到客户端应用程序的注销订阅请求时,在散列表
中查找该数据是否被订阅,如是则在散列表中获得数据对应的应用程序句柄链
表,遍历链表,找到该应用程序句柄,并从链表中删除该应用程序句柄;如果
删除后,链表为空,则说明客户端中,已经没有应用程序订阅该数据,在散列
表中删除被注销订阅的数据标签名和链表的映射关系,并删除该链表,向服务
器发出注销订阅请求;
服务器的订阅-发布模块接收到注销订阅请求时,在散列表中查找该数据是
否被订阅,如是则在散列表中获得该数据对应的客户端信息链表,遍历链表,
找到该客户端信息,从链表中删除该客户端信息。
客户端信息包括客户端的IP地址和主机名称信息。
触发发布的发布条件为,实时数据变化范围超过其变化死区或距离上次发
布时间超过规定的超时等待时间。
实时数据从服务器发布到客户端应用程序,时间复杂度为O(1)。
本发明所达到的有益效果:本发明通过2次订阅-发布,实现了客户端应用
程序获得服务器端实时数据的方法,一方面将客户端应用程序与实时数据库解
耦,消除模块之间的依赖关系,另一方面,避免了客户端频繁访问服务器获取
实时数据带来的时间消耗,硬件资源、网络资源的开销,在实时数据发生变化
时,可立即发布订阅的数据到客户端程序;解决了现有订阅-发布机制实时数据
库由应用程序直接向服务器订阅数据带来的大量冗余订阅数据占用系统资源的
问题,保证了数据的实时性,并支持了理论上无限量客户端的并发访问。
附图说明
图1为本发明的系统架构图。
图2为客户端的订阅-发布模块示意图。
图3为服务器的订阅-发布模块示意图。
图4为本发明的流程图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明
本发明的技术方案,而不能以此来限制本发明的保护范围。
如图1所示,为基于服务器-客户端架构的系统,包括服务器和客户端,服
务器内置有实时数据库和订阅-发布模块,客户端内置有应用程序和订阅-发布
模块。
客户端应用程序:获得并使用实时数据库中实时数据的实体,即具体的使
用者。
如图2所示,客户端的订阅-发布模块:负责管理客户端应用程序的订阅请
求,可注册、注销的客户端应用程序的订阅请求,在收到服务器的实时数据发
布后,向注册的应用程序发布其订阅的实时数据。
客户端的订阅-发布模块通过散列表和链表数据结构管理订阅请求,其中,
散列表以被订阅数据的标签名为键值,以订阅该数据的客户端应用程序句柄链
表为值。
客户端的订阅-发布模块注册客户端的订阅请求过程为:
客户端的订阅-发布模块接受到客户端应用程序的订阅请求时,在散列表中
查找该数据是否被订阅,如是则获得该数据对应的应用程序句柄链表,如果链
表中不存在该应用程序句柄,则将新的订阅请求的应用程序句柄加入到链表末
端;如果该数据未被订阅,则新建应用程序句柄链表,并在链表中加入该订阅
应用程序句柄,在散列表中新建被订阅数据的标签名和该链表的映射关系,同
时向服务器发送订阅请求。
客户端的订阅-发布模块注销客户端的订阅请求过程为:
客户端的订阅-发布模块收到客户端应用程序的注销订阅请求时,在散列表
中查找该数据是否被订阅,如是则在散列表中获得数据对应的应用程序句柄链
表,遍历链表,找到该应用程序句柄,并从链表中删除该应用程序句柄;如果
删除后,链表为空,则说明客户端中,已经没有应用程序订阅该数据,在散列
表中删除被注销订阅的数据标签名和链表的映射关系,并删除该链表,向服务
器发出注销订阅请求。
实时数据库:负责采集并存贮实时数据,管理访问事务。
如图3所示,服务器的订阅-发布模块:负责管理客户端的订阅请求,可
注册、注销的客户端的订阅请求,在实时数据满足发布条件时,向注册的客户
端发布其订阅的实时数据。
服务器的订阅-发布模块通过散列表和链表数据结构管理订阅请求,其中,
散列表以被订阅数据的标签名为键值,以订阅该数据的客户端信息链表为值;
客户端信息包括客户端的IP地址和主机名称信息。
服务器的订阅-发布模块注册客户端的订阅请求过程为:
服务器的订阅-发布模块在接收到客户端的订阅请求时,在散列表中查找该
数据是否被订阅,如是则获得该数据所对应的客户端信息链表;如果链表中不
存在该客户端信息,则将新的订阅请求客户端信息加入到链表末端;如果该数
据没有被订阅,则需新建客户端信息链表,并加入该客户端信息,在散列表中
新建被订阅数据的标签名和该链表的映射关系。
服务器的订阅-发布模块注销客户端的订阅请求过程为:
服务器的订阅-发布模块接收到注销订阅请求时,在散列表中查找该数据是
否被订阅,如是则在散列表中获得该数据对应的客户端信息链表,遍历链表,
找到该客户端信息,从链表中删除该客户端信息。
如图4所示,基于观察者模式的实时数据库实时数据发布方法,该方法基
采用2级订阅-发布机制,具体过程为:
1)客户端应用程序向客户端的订阅-发布模块订阅实时数据;
2)客户端的订阅-发布模块接收并注册客户端应用程序的订阅请求,并向
服务器订阅实时数据;
3)服务器的订阅-发布模块接收并注册客户端的订阅请求;
4)在实时数据满足发布条件时,向订阅该实时数据的客户端发布;
触发发布的发布条件为,实时数据变化范围超过其变化死区或距离上次发
布时间超过规定的超时等待时间;
5)客户端的订阅-发布模块接收到服务器发布的实时数据时,向客户端应
用程序发布订阅的实时数据。
实时数据从服务器发布到客户端应用程序,时间复杂度为O(1),保证了发
布的实时性,服务器通过链表维护订阅客户端信息,可支持理论上无限客户端
并发访问。
以客户端应用程序的一次实时数据订阅为例,数据流和事务处理具体步骤
如下所示:
1.客户端应用程序句柄为Ha,订阅标签名为Va的实时数据。
2.客户端的订阅-发布模块在应用程序句柄散列表HdlHash中,通过标签
名Va检索应用程序句柄链表HdlList,如果找到,且Ha不在HdlList中,则在
HdlList尾端加入应用程序句柄Ha,否则新建链表HdlList,并在HdlList中加
入应用程序句柄Ha,在HdlHash中建立Va和HdlList的映射关系。
3.客户端向服务器发送订阅请求。
4.服务器收到订阅消息报文,并解析,获得要订阅的数据标签名Va和客户
端的IP地址和主机名称等信息ClientInfo。
5.服务器的订阅-发布模块在客户端信息散列表ClientHash中,通过标签
名Va检索订阅客户端信息链表ClientList,如果找到且ClientInfo不在
ClientList中,其则在ClientList链表尾端加入客户端信息ClientInfo,否
则新建链表ClientList,并在ClientList中加入客户端信息ClientInfo,在
ClientHash中建立Va和ClientList的映射关系。
6.实时数据库中变量Va的值变化范围超过其变化死区或距离上次发布时间
超过规定的超时等待时间,触发发布条件,服务器端的订阅-发布模块通过Va
检索客户端信息散列表ClientHash,获得客户端信息链表ClientList,遍历
ClientList,依次向ClientList中各个节点所记录的客户端通过TCP/IP通讯
协议发布数据Va的实时值。
7.客户端收到服务器对数据Va的发布信息,客户端的订阅-发布模块通过
Va检索应用程序句柄散列表HdlHash获得应用程序句柄链表HdlList,遍历
HdlList,依次向应用程序发布数据Va的实时数据。
上述方法一方面将客户端应用程序与实时数据库解耦,消除模块之间的依
赖关系,另一方面,避免了客户端频繁访问服务器获取实时数据带来的时间消
耗,硬件资源、网络资源的开销,在实时数据发生变化时,可立即发布订阅的
数据到客户端程序;解决了现有订阅-发布机制实时数据库由应用程序直接向服
务器订阅数据带来的大量冗余订阅数据占用系统资源的问题,保证了数据的实
时性,并支持了理论上无限量客户端的并发访问。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通
技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变
形,这些改进和变形也应视为本发明的保护范围。