基于MongoDB的时序数据库系统
技术领域
本发明涉及一种基于MongoDB的时序数据库系统,属于数据库研发技术领域。
背景技术
电力、化工、能源等流程工业生产领域,最主要的特点是生产连续进行、不发生中断,这一过程中会产生大量的时序数据。随着生产设备的数字化和智能化以及物联网技术的发展,实际生产中采集的实时数据呈现出爆发式的增长趋势。这些数据的存储查询是对传统数据库的一大挑战。时序数据库的出现,以其超大规模数据处理能力和高比例压缩能力,实现海量数据的高效压缩存储、查询检索和统计分析,为应用系统进行数据挖掘、分析计算的提供数据基础,提升了企业在实时监控、数据处理与存储、生产信息的集成与共享等方面的信息化程度。
目前电力企业时序数据存储主要是基于集中部署方式。一些市面上主流的实序数据库存在使用和学习成本过高,维护困难,系统依赖控件过多,平台移植性差,扩展性不足,安装部署卸载过程复杂等问题。还有些时序数据库的客户端的并发数不足,支持的点位量有限,在数据容量变大大时,会出现读、写性能的显著下降。
时序数据库主要应用于对数据库能力和实时处理技术两者均有较高要求的领域,如电力、石化、冶金等工业控制系统与信息管理系统中。目前国内外已经存在许多成熟的时序数据库。
国外的实时数据库产品中,最为知名的是以下3种:美国欧斯皑 (OSI)公司的实时数据库系统PI、美国霍尼韦尔(Honeywell)公司的实时数据库系统PHD、美国艾斯本技术公司(AspenTech)的数据库系统IP21。
其中PI数据库中作为OSI公司的标志产品,采用了旋转口压缩技术和二次过滤技术,对数据进行了有效的压缩,极大地节省了硬盘空间,并提供了秒级数据响应,成为业界的标杆系统,并在电力行业、石化行业得到广泛的应用。但同样的,PI数据库的价格也是高居不下,使用成本过高。而其主要运行在Windows平台之下,在跨平台方面有所不足。
PHD数据库拥有实时数据库和历史数据库功能,它将连续的与离散的生产数据、过程性能等所有与此有关系的数据信息采集并集成,完成长久保存。但他有使用限制,需要先获得Oracle的版权。
IP21数据库是集成生产过程信息如各种工艺参数与高层次应用程序(如先进控制、优化、过程管理)的基础数据平台。其采用例外报告和旋转口压缩算法对数据进行压缩,它的数据结构较为灵活,并对外提供连接特殊应用的开放应用接口(APIS)、外部处理任务、符合 ANSI-92标准的SQL和许多设备接口。但它的性能和价格都处于以上两个数据库的中间水平。
除了国外时序数据库,国内近些年也出现许多时序数据库产品,比如SUPCON公司的ESP-iSYS,中国科学院研制的Agilor,国电通公司的SmartReal等。与国外这些标杆级别的实序数据库相比,国内时序数据库在数据压缩,处理,并发等方面上,还有一定的不足,但国内实序数据库产品经过近几年的快速发展,通过技术革新以及价格优势,所占国内实序数据库市场份额不断提高。
发明内容
目前,市面上的实时数据库产品比较多,一般性能比较优越的其成本比较高,大部分数据库在数据量增加时,会出现数据请求速度明显降低,计算测点支持有限,依赖的控件比较多,比如PHD需要先获得Oracle的版权,安装、维护、学习难度大,对于跨平台等方面支持的不够理想。而且为了保证数据库的性能,很多数据库限制了点位的数量,最大的建点数量可能无法满足现实生产的需要。当然市面上也有一些分布式的实时数据库产品,这些产品首先需要更多的机器资源,在机器资源有限的情况下,难以发挥分布式的优势,在实际点数未达到一定级别的情况,会造成机器资源的浪费。而且分布式数据系统的安装和维护难度普遍要高于单机部署数据库的难度,所需的成本也一般是高于单机部署的数据库。
本发明的目的主要是利用互联网技术的发展成果,以及开源数据库的社区优势,定位于厂级规模,将文档型数据库MongoDB与高性能的key-value内存数据库Redis相结合应用到电力行业的时序数据存储中来,旨在有限的机器资源情况下,设计并完成一个安装便捷、学习使用维护成本低、计算测点支持灵活、支撑点位容量大、扩展方便、支持多种操作数据库语言、拥有跨平台优势、拥有秒级时序数据存储和检索能力的时序数据库。
本发明采用如下技术方案:基于MongoDB的时序数据库系统,其特征在于,包括RtdbCnfg数据读写服务模块、实时数据存储Redis 数据库、历史数据存储MongoDB数据库、安全管理模块、统一接口服务REST模块、DataSync数据同步服务模块,所述实时数据存储Redis数据库与所述历史数据存储MongoDB数据库相连接,所述 RtdbCnfg数据读写服务模块分别与所述实时数据存储Redis数据库、所述历史数据存储MongoDB数据库、所述统一接口服务REST模块相连接,所述DataSync数据同步服务模块与所述实时数据存储Redis 数据库相连接,所述安全管理模块分别与所述统一接口服务REST模块、所述DataSync数据同步服务模块相连接。
作为一种较佳的实施例,所述时序数据库系统还包括DataCalc 计算服务模块,所述DataCalc计算服务模块分别与所述RtdbCnfg数据读写服务模块、所述实时数据存储Redis数据库相连接;所述 DataCalc计算服务模块以轮寻、触发两种形式,计算测点的实时数据,并将结果交给所述RtdbCnfg数据读写服务模块进行相应操作。
作为一种较佳的实施例,所述时序数据库系统还包括DataArch 转存服务模块,所述DataArch转存服务模块分别与所述实时数据存储Redis数据库、所述历史数据存储MongoDB数据库相连接;所述 DataArch转存服务模块是将实时缓存表和历史缓存表的数据定时更新到所述历史数据存储MongoDB数据库中,用以缓解频繁操作历史库对所述历史数据存储MongoDB数据库造成的数据压力。
作为一种较佳的实施例,所述时序数据库系统还包括DataApi客户端,所述DataApi客户端通过连接所述统一接口服务REST模块与所述RtdbCnfg数据读写服务模块相连接。
作为一种较佳的实施例,所述DataSync数据同步服务模块基于网络通信应用框架Apache Mina Server构建完成,所述DataSync数据同步服务模块是将需要进行跨安全区同步操作的数据转发到低安全区时序数据库系统中,具体分为两个重要过程:一是订阅Redis信息,获取操作类型和转发数据,再通过Mina框架发出同步指令,并同时发送操作类型和转发数据;二是通过Mina框架接受同步指令和同步数据,解析出操作类型和转发数据,再通过所述RtdbCnfg数据读写服务模块,将同步数据同步到同步区的时序数据库中。
作为一种较佳的实施例,所述实时数据存储Redis数据库用来使用内存数据库Redis,利用Redis基于内存存取的优势,以及key-value 的存储格式、批量读取的接口,实现对于实时数据的快速存取;并且利用Redis数据库提供的订阅/发布功能,实现消息中间件,用以触发内存加载、启动计算服务和数据同步操作。
作为一种较佳的实施例,所述历史数据存储MongoDB数据库使用文档型数据库MongoDB,利用MongoDB数据库的nosql存储特性,松散的数据结构,快速的查询语言,满足时序数据库对历史数据进行大量、复杂、快速请求的需求;所述历史数据存储MongoDB数据库的历史数据存储表中,以测点+天为行存储单元存储历史数据,通过数组压缩算法对以小时为压缩粒度的数据进行压缩存储。
作为一种较佳的实施例,所述RtdbCnfg数据读写服务模块进行数据写操作中,需要进行跨安全区同步、内存重新加载,计算服务触发的,所述RtdbCnfg数据读写服务模块会通过Redis订阅/发布功能,将相应操作命令发布出去。
作为一种较佳的实施例,所述统一接口服务REST模块发送数据读写请求至所述RtdbCnfg数据读写服务模块,所述RtdbCnfg数据读写服务模块根据请求内容进行相应的所述实时数据存储Redis数据库或者所述历史数据存储MongoDB数据库的读写操作,所述RtdbCnfg 数据读写服务模块完成后将操作结果通过所述统一接口服务REST 模块反馈给所述DataApi客户端;所述统一接口服务REST模块采用 Restful API统一数据接口,用来完成实时数据操作、历史数据操作和测点操作接口服务。
作为一种较佳的实施例,所述DataApi客户端通过连接所述统一接口服务REST模块与所述RtdbCnfg数据读写服务模块相连接;通过对所述统一接口服务REST模块再封装,提供jar包供第三方工程调用所述的基于MongoDB的时序数据库系统。
本发明所达到的有益效果:第一,本发明的时序数据库整体上具有安装学习成本低、性能高、扩展性强、安全性高、跨平台等优点;第二,为尽可能节约数据库平台建设的成本,本发明基于Redis、 MongoDB开源数据库设计完成,拥有开源社区优势,数据库组件和自研组件实现一键化安装部署,各组件通过B/S模式进行实时运行监控,大大降低了用户安装维护学习难度;第三,为了提高时序数据库的存取性能,本发明使用的两种原生数据库产品Redis、MongoDB,其自身读取性能十分优越,再结合设计的时序数据存储结构,合理压缩数据,使得在面向厂级规模的时序数据存取应用中,能够支撑更多的点位容量,拥有秒级时序数据存储和检索能力;第四,为了提高数据库的可扩展性,本发明采用了REST软件架构风格,通过Restful API 接口形式对外提供统一访问接口,使数据库系统与外界使用相分离,数据库升级改造不会对使用者产生代码层面的影响,利用RESTful 的语言无关以及JSON数据格式让其能应对绝大多数的开发环境与开发语言,扩展性和适用环境都具有先天优势;第五,为了提高数据库的安全性,本发明对外利用HTTP(HTTPS)无状态连接状态属性,在数据访问、数据库组件使用上采用用户登录认证、JWT加密认证与Redis、MongoDB自身的安全认证机制相结合的方式保证数据库访问安全。同时通过同步服务实现数据从高安全区向低安全区的单向传输,与物理隔离装置实现有效结合,保证了数据跨区传输的安全性;第六,为了满足数据库的跨平台要求,本发明引用的数据库组件都满足跨平台要求,自研的部分基于java环境开发,支持Windows系统以及各Linux版本和国产系统,如麒麟、凝思等。
附图说明
图1是本发明的基于MongoDB的时序数据库系统的框图。
图2是本发明的基于MongoDB的时序数据库系统的运行流程图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
如图1所示,本发明提出基于MongoDB的时序数据库系统,包括RtdbCnfg数据读写服务模块、实时数据存储Redis数据库、历史数据存储MongoDB数据库、安全管理模块、统一接口服务REST模块、DataSync数据同步服务模块,所述实时数据存储Redis数据库与所述历史数据存储MongoDB数据库相连接,所述RtdbCnfg数据读写服务模块分别与所述实时数据存储Redis数据库、所述历史数据存储MongoDB数据库、所述统一接口服务REST模块相连接,所述 DataSync数据同步服务模块与所述实时数据存储Redis数据库相连接,所述安全管理模块分别与所述统一接口服务REST模块、所述 DataSync数据同步服务模块相连接。
本发明的安全管理模块是一种用于保护和管理强认证系统所使用的密钥,并同时提供相关密码学操作的计算机硬件设备,现有技术已有多种设计,本发明不再赘述。
如图2所示,作为一种较佳的实施例,所述时序数据库系统还包括DataCalc计算服务模块,所述DataCalc计算服务模块分别与所述RtdbCnfg数据读写服务模块、所述实时数据存储Redis数据库相连接;所述DataCalc计算服务模块以轮寻、触发两种形式,计算计算测点的实时数据,并将结果交给所述RtdbCnfg数据读写服务模块进行相应操作。
作为一种较佳的实施例,所述时序数据库系统还包括DataArch 转存服务模块,所述DataArch转存服务模块分别与所述实时数据存储Redis数据库、所述历史数据存储MongoDB数据库相连接;所述 DataArch转存服务模块是将实时缓存表和历史缓存表的数据定时更新到所述历史数据存储MongoDB数据库中,用以缓解频繁操作历史库对所述历史数据存储MongoDB数据库造成的数据压力。
作为一种较佳的实施例,所述时序数据库系统还包括DataApi客户端,所述DataApi客户端通过连接所述统一接口服务REST模块与所述RtdbCnfg数据读写服务模块相连接。
作为一种较佳的实施例,所述DataSync数据同步服务模块基于网络通信应用框架Apache Mina Server构建完成,利用Mina具有快速开发高性能、高扩展性的网络通信应用,以及提供了事件驱动、异步操作的编程模型,实现数据从高安全区向低安全区的单向同步功能,所述DataSync数据同步服务模块是将需要进行跨安全区同步操作的数据转发到低安全区时序数据库系统中,具体分为两个重要过程:一是订阅Redis信息,从三区云平台获取操作类型和转发数据,再通过 Mina框架发出同步指令,并同时发送操作类型和转发数据;二是通过Mina框架接受同步指令和同步数据,解析出操作类型和转发数据,再通过所述RtdbCnfg数据读写服务模块,将同步数据同步到同步区的时序数据库中。
作为一种较佳的实施例,所述实时数据存储Redis数据库用来使用内存数据库Redis,利用Redis基于内存存取的优势,以及key-value 的存储格式、批量读取的接口,实现对于实时数据的快速存取;并且利用Redis数据库提供的订阅/发布功能,实现消息中间件,用以触发内存加载、启动计算服务和数据同步操作。
作为一种较佳的实施例,所述历史数据存储MongoDB数据库使用文档型数据库MongoDB,利用MongoDB数据库的nosql存储特性,松散的数据结构,快速的查询语言,满足时序数据库对历史数据进行大量、复杂、快速请求的需求;所述历史数据存储MongoDB数据库的历史数据存储表中,以测点+天为行存储单元存储历史数据,通过数组压缩算法对以小时为压缩粒度的数据进行压缩存储。
所述历史数据存储MongoDB数据库的历史数据存储表结构如表1 所示。
表1历史数据存储表结构
作为一种较佳的实施例,所述RtdbCnfg数据读写服务模块进行数据写操作中,需要进行跨安全区同步、内存重新加载,计算服务触发的,所述RtdbCnfg数据读写服务模块会通过Redis订阅/发布功能,将相应操作命令发布出去。
计算测点:本质是一种特殊的实时测点,它的值由一个或多个实时测点的实时值通过一系列逻辑运算得到,即计算测点依赖一个或多个实时测点。轮寻是指按照计算测点的计算周期进行周期性计算。触发是指依据依赖测点的实时值变化情况触发计算服务计算相关计算测点的实时值,触发方式需要通过消息中间件Redis订阅相关信息。
作为一种较佳的实施例,所述统一接口服务REST模块发送数据读写请求至所述RtdbCnfg数据读写服务模块,所述RtdbCnfg数据读写服务模块根据请求内容进行相应的所述实时数据存储Redis数据库或者所述历史数据存储MongoDB数据库的读写操作,所述RtdbCnfg 数据读写服务模块完成后将操作结果通过所述统一接口服务REST 模块反馈给所述DataApi客户端;所述统一接口服务REST模块采用 Restful API统一数据接口,采取REST软件架构风格,通过Restful API 接口的形式对外提供,充分发挥Restful的无状态协议HTTP,扩展能力很强;JSON报文序列化,轻量简单,人机友好;语言无关等优势来完成实时数据操作、历史数据操作和测点操作接口服务。
作为一种较佳的实施例,所述DataApi客户端是通过封装统一接口服务REST模块,提供jar包供第三方工程调用所述的基于 MongoDB的时序数据库系统。
本发明的时序数据库系统的对外接口即Restful API统一数据接口主要分为如下四种操作服务。
第一,实时数据操作服务,包括:*批量读实时;*批量写实时。
第二,历史数据操作服务;具体包括:*单点时间段历史插值查询;*单/多点时间段历史插值查询;*多时刻多点查询(多点断面值);*批量写历史(连续大批量操作情况下用,实时性不高);*批量写/更改历史值(实时性要求高情况下用,实时性高);*删除历史测点;*获取一段时间内历史存储值数量;*获取一段时间内历史平均值;*获取一段时间内历史最大值;*获取一段时间内历史最小值。
第三,测点操作相关接口服务,具体包括:*添加/修改实时测点; *添加/修改计算测点;*删除计算测点;*读实时测点信息;*读计算测点信息;*批量操作实时测点(添加/修改/删除);*批量操作计算测点(添加/修改/删除);*测点信息导出(实时点/计算点)。
第四,其他操作接口服务,具体包括:*备份数据库;*数据库初始化;*读取数据库信息。
本发明是一种基于MongoDB的数据存储和检索技术的时序数据库系统,重点在引入文档型数据库MongoDB以及高性能的key-value 内存数据库Redis,保证时序数据处理的时效性。其中,Redis与MongoDB相结合的设计思路,实时和历史表结构的设计,历史数据的压缩存储,数据从高安全区向低安全区的单向同步,缓解历史库读取压力的缓存表设计,都是本发明的关键点和欲保护点。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。