APP下载

基于Flex技术的云同步方案

2015-12-01刘传尧谢火木施芝元

关键词:孤岛日志语句

刘传尧,谢火木,施芝元

(1.厦门大学现代教育技术与实践训练中心,2.厦门大学信息科学与技术学院,福建 厦门361005)

高校校园信息化在建设初期由于没有进行统筹规划,各部门各自为阵,在全校范围内逐步建立了自己的信息系统,如教务系统、科研系统、人事系统等,经过近20年的发展,系统功能已经趋于完善,并已经融入到日常工作中,但随着校园信息化的基础设施的完善,这些孤立的系统逐渐显现出了它们的弊端,其中最主要的问题就是这些系统之间无法实现实时数据同步与信息共享而形成了所谓的“信息孤岛”[1].目前主要解决的办法有2种:1)推翻原有系统,建立校级数据中心,由学校重新规划建设各部门信息系统,但成本过高;2)对原有的系统进行升级改造,然后实现跨部门之间的实时数据同步,让“数据孤岛”之间的基础数据有效共享、合并冗余数据[2],这是目前普遍采用的方法.

1 数字校园“信息孤岛”简介

所谓“信息孤岛”(information isolated island)指的是相对独立的不同类型的信息系统,由于相互封闭,无法进行顺畅的信息交流,犹如一个个分散、独立的岛屿[3].其本质问题就是这些独立的系统之间所生成的数据无法相互共享、数据不一致,这不仅导致了不同的系统因独立管理而产生大量冗余数据,而且由于系统与系统之间缺乏数据关联,无法对数据进行科学分析,特别在大数据时代学校无法使用这些数据进行科学的管理与决策.高校“信息孤岛”产生的原因主要是在信息化建设初期,在认识上,没有充分理解信息化内涵;在管理上,缺少统一规划;在技术上,只注重硬件投入,而忽略软件资源的建设[3].

查阅文献发现,目前在解决高校“信息孤岛”问题上,主要还是从政策理论上去避免“信息孤岛”的产生,通过技术来解决现存的“信息孤岛”的方案相关文献比较缺乏.目前也有专家提出基于信息交换平台的实现方法,比如,颜廷良[4]提出基于XML消息的安全数据交换平台研究与应用,郭向阳[5]提出基于数据库复制技术的云交换平台研究与实现等.本文提出的是一种基于日志解析数据同步的“数据孤岛”解决方案.该方案的优势在于操作方便,适合远程同步操作,可以实现记录级、表一级以及异构表间的数据同步等.

2 系统设计方案

2.1 系统设计的总体思想

本文提出的数字校园的数据同步方案,主要依靠分析Oracle数据库Redo日志文件,解析日志中的SQL语句,进而让远程目标服务器执行同样SQL语句来实现云同步.

Oracle数据库的操作事务都记录在Redo日志中,但是原始的Redo日志是加密存储的非开放二进制数据,无法直接提取阅读,要解析Oracle日志,目前比较好的方法就是使用Oracle公司提供的LogMiner工具.LogMiner工具是Oracle8i版本以后新增加的功能,通过使用LogMiner程序,可以对Oracle日志进行解析,解析在线日志、离线日志以及数据库的重作日志文件[6],从而获得相应数据库操作的DML语句,然后利用Flex词法分析编译工具,构造针对SQL语句的解析器,并在解析以后重构同步端需要的目标语句.

在广域网数字校园环境下开发云同步系统,主要技术瓶颈还是增量事件和数据如何同步到云端以及云同步系统的效率问题[7].传统的分布式数据库环境中采用的静态数据备份技术,由于传输数据文件容量巨大,导致效率很低[8-9],不适用于今天的云技术发展,所以增量事务同步成为云同步方案中唯一可行的选择[10-11].在 Oracle数据库中,增量事务同步需要解决Redo日志的解析以及增量事务和数据在云端计算机快速入库的问题.

2.2 语法解析器的构造原理

快速词法分析产生器(Flex)是一种词法分析程序,它是LEX的开放源代码版本,以BSD许可证发布.本文使用的Flex版本为Flex2.5.2.Flex主要功能是依据用户定义的正则表达式构词规则,生成扫描词法结构的自动程序.与自己设计词法解析程序相比,Flex的速度和准确度高得多,并且采用它,可以减少书写大量的代码.

2.2.1 SQL语句解析器

本文的SQL语句解析器的设计如下:

1)基本SQL关键字解析,采用依据正则表达式直接构造关键词的方法.

2)SQL中的 Where语句解析.以下适用于不带like,in等结构的简单where语句.

3)SQL语句中的insert的values值域解析.本文采用的构造规则仅适用于标准SQL insert语句:

4)SQL语句中Set语句解析.举例SQL结构解析针对带有to_date类型的SQL语句.

采用如下的SQL词法构造方法:

2.2.2 SQL语句解析类的设计

利用Flex构造的SQL语句解析规则后需要在云同步系统中调用,还需要设计可重用的C++类库.以下列举本文云同步系统中采用的SQL语句解析类的结构说明,其中FlexLexer.h为Flex类库中的标准头文件.

3 数字校园云同步系统的实现

系统总体设计由3大模块构成,分别为云源端、云目的端和云控制端.云源端和云目的端以服务的方式运行,云控制端为一个在Windows下运行的32位应用程序.云源端根据云控制端发送的要求,操纵地方各局数据库,然后提供系统所需的源数据.目的端依据系统在云控制端的设置,在设定的周期内,抽取云源端的数据,并进行入库.云控制端操纵云源端和云目的端运行,并提供图形控制界面供用户设置云同步系统运行所需参数.云同步系统各端定义如下:

1)云控制端:获取云源端、云目的端数据库的表信息和字段信息,并提供展示界面;提供云源端和云目的端对应数据表和字段映射的图形操作界面;提供ftp信息配置界面和同步时间设置界面,并提供ftp连接测试界面;反馈信息图形展示界面;将相关云同步配置信息发送给云客户端和云服务端的监听端口.

2)云源端:捕获指定监听端口的云控制端表格映射信息、同步文件夹和同步信号;依据捕获到的时间信号,调用LogMiner进行解析入库,并根据得到的表格映射信息,将入库结果保存为.XML文件中;在云端同步时间到达时,将.XML文件上传到指定的同步文件夹;周期捕获云目的端的时间信号.

3)云目的端:在指定的监听端口捕捉来自云控制端的时间同步信号;在指定的时间同步信号内读取云源端上传的语法构造.XML文件,并依据语法规则构造SQL语句执行入库.

3.1 云源端的实现

云源端运行数据存储过程LOG_DUMP,利用LogMiner对Oracle数据库的Redo日志文件进行解析,并将结果存入与Redo日志文件同名的表中.云源端程序(Cloud_XS)将读取的解析结果存入数据库,并依据在云控制端配置的数据表映射关系将相关的SQL语句进行转换,保存为.XML格式的文件,在云交换时间到达时以ftp方式上传到云目标端.

云源端数据存储过程主要功能包括SQL语句分析,通过Flex编写词法解析器,解析并重构符合OTL接口标准的SQL语句[12];创建.XML文件,将构造好的SQL语句依据云控制端的表项映射倒入到一个.XML文件中;访问Oracle数据库,从云控制端读取同步参数(包括握手参数、时间参数和回滚参数等);客户端功能,向云目标端上传构造好的含有SQL语句的.XML文件.云源端数据存储过程业务逻辑详见图1.

云源端程序主要功能包括自动归档Redo日志和调用LogMiner解析最新归档的Redo日志.云源端的输入为经过LogMiner所解析的Redo日志,表的字段为:SCN,TIMESTAMP,SEG _OWNER,SEG _NAME,ROW_ID,SQL_REDO.表名称同其对应的Redo日志名称同名.云源端程序将从Redo日志解析中获取的结果,根据云控制端配置的表映射信息进行转换,将转换结果以XML文件的形式输出.云源端程序流程详见图2.

3.2 云目标端的实现

云目标端主要负责在云交换时间到达时,读取云源端程序上传的.XML文件,将提取内部保存的SQL语句执行入库.云目标端的主要功能包括创建Cloud_XD数据库,解析.XML文件和执行入库操作.云目标端输入为Cloud_XS程序上传的.XML文件.云目标端程序流程详见图3.

3.3 云控制端的实现

云控制端程序主要负责提供图形化的云源端与云目标端数据表映射关系,以及增删改操作界面(由于云源端与云目标端对应表的字段可能不一致,可能在此过程中需要人工确定对应表格映射关系).

图1 云源端数据存储过程Fig.1 Cloud source client data storage process

云控制端的处理流程包括:通过用户输入获取云目标端数据库的信息后,连接云目标端数据库,读取Cloud_XD.Source表获取云源端的数据库表信息.通过Cloud_XD.Source表获取源数据库的信息可以访问云源端各个数据库Cloud_XS.Map和Cloud_XS.Field获取配置完成的数据表映射信息.

云控制端提供操作的数据表和字段如下:

1)云交换时间设置:设置云交换时间后,云控制端需要将Cloud_XS.OM 和Cloud_XD.OM 的Exe_time_tag设置为云系统的同步时间.

2)云交换立即执行的触发:当用户触发界面上立即同步按钮后,云控制端需要将Cloud_XS.OM 和Cloud_XD.OM 的 Next_time_tag设置为当前时间.

3)云源端配置步骤:添加云源数据端后,需将相关信息填入Cloud_XD.Source数据库,和Cloud_XS.OM的 Destination_IP、Destination_USER、Destination_PASSWORD、FTP_USER、FTP_PASSWORD字段.

4)云控制端的映射信息增删改:用户在云控制端进行映射信息的删改操作时,将结果写入Cloud_XS.Map和Cloud_XS.Field,并且将Cloud_XS.OM 表中的对应行ID值进行修改.

图2 云源端程序流程Fig.2 Cloud source clien flow

图3 云目标端程序流程Fig.3 Cloud target client flow

5)云系统的日志显示:通过读取Cloud_XS.OM和Cloud_XD.OM可以获取当前云同步系统运行的日志.

6)云系统的同步控制:通过判断Cloud_XD.OM的SYS_STATUS字段可以判断云系统是否正在进行数据同步.

4 数据同步系统处理

本次云交换系统云源端与云目标端程序均采用服务进程的方式设置为系统服务.云控制端程序负责远程初始化云源端程序的交换时间、交换数据的数据表映射关系设置和交换数据的有效起始时间等参数.云同步系统的时序图详见图4.

为了提高云同步系统运行效率和性能,系统中的数据同步不是通过传统的数据表复制来实现,而是通过在云源端每小时调用一次Oracle数据库自带的LogMiner进行解析对应同步时段的在线Redo日志,然后将得到的SQL语句入库.依据用户在云控制端设置,将SQL语句中相关字段和数据进行转换,以.XML文件保存,并在用户指定云同步时间到达时,将.XML文件上传至同步文件夹.云目的端程序将.XML文件中的SQL语句存入数据库指定表空间中.云源端再提取Redo日志存放表中事务操作内容并执行,达到云源端和云目标端的数据同步的目的.

实验结果如表1所示,图中显示Redo日志文件规模直接影响到了云交换系统的交换频率和交换时间长度.在Redo日志文件规模较小时,交换频率偏高会影响到服务器日常工作(LogMiner的运行同时会影响数据库效率),但是Redo日志文件规模设置较大时,又会导致云交换时间过长(例如必须在晚上非工作时间运行).根据实验结果,日志文件设置约为50 MB是比较合理而且频率和交换时间都处在可以接受的水平.

5 结 论

图4 云同步系统的时序图Fig.4 Cloud synchronization system sequence diagram

表1 数据交换系统实验结果Tab.1 The test result of exchange system

在数字校园中的多重数据孤岛环境下要开发云交换系统,我们面对是数据库中增量数据如何同步以及数据在同步时的效率这两个主要问题.现高校中由于存在跨地多个校区,这些校区之间要进行数据实时同步时,不能采用在集中环境下的那种简单静态数据备份技术,这种技术在传输时文件过大,并且效率很低.因此以数据库中的增量数据同步就成为了唯一可行的方案.在基于Oracle数据库应用系统中,增量数据同步转换成解决数据库日志的解析以及增量产生的数据在目标计算机快速入库的问题.利用LogMiner工具来解析Oracle系统的日志是实现分布式云交换系统所要解决前提条件之一.对LogMiner解析出的日志进行SQL语句分析重构(针对目标数据库的快速入库接口重构)是实现分布式数据同步系统要解决的另一个前提.本文实现了数字校园网数据同步系统的技术问题及系统架构问题,并给出了系统实现方案.

[1]段宗曜,饶水林.信息化建设在高校校园中的实现模式研究[J].计算机科学,2013,40(11A):417-420.

[2]赵卫,冯华丽.高校信息化平台建设中“信息孤岛”现象及对策[J].中国科技信息,2014(24):52-53.

[3]舒畅.高校数字化校园的壁垒--信息孤岛[J].中国教育信息化,2011(5):16-17.

[4]颜廷良.基于XML消息的安全数据交换平台研究与应用[J].计算机技术与发展,2013,23(2):172-176.

[5]郭向阳.基于数据库复制技术的云交换平台研究与实现[J].计算机与现代化,2011(8):157-163.

[6]张立奎,闫子熙.基于LogMiner的Oracle数据库日志分析[J].计算机与网络,2013(21):145-147.

[7]张青凤,张凤琴,王磊.多数据中心的数据同步模型研究与设计[J].微型机与应用,2013(12):60-66.

[8]赵荣.分布式数据库系统的故障恢复方法[J].科技信息,2013(11):160-161.

[9]秦森,杨艳.基于Oracle日志分析的数据还原操作的设计及实现[J].电脑知识与技术,2007(3):626-628.

[10]王玉标,饶锡如,何盼.异构环境下数据库增量同步更新机制[J].计算机工程与设计,2011,32(3):948-951.

[11]杨德勇.远程数据同步的设计与实现[J].信息与电脑,2012(3):112-113.

[12]孙兆玉,朱鸿宇,黄宇光.Linux环境中使用Flex、Bison进行SQL语法分析[J].电脑编程技巧与维护,2007(2):38-41.

猜你喜欢

孤岛日志语句
一名老党员的工作日志
不再是孤岛
扶贫日志
重点:语句衔接
《岛上书店》:与书相伴,没有谁是一座孤岛
雅皮的心情日志
没有人是一座孤岛
游学日志
互联互通破“孤岛”
我喜欢