(天津电子信息职业学院,天津 300350)
随着高校数字化校园的不断发展,各种应用软件以及移动客户端在高校教育教学活动中扮演的角色越来越重要,比如现在很多高校引入的网络课堂都是基于手机客户端的,其学习方式大大扩展延伸了学生的学习时间,同时也受到广大学生的喜爱。但大部分高校管理软件都是各自为政的状态,软件之间的数据沟通基本上是手工导入导出,没有放到一个数字化平台上统一管理,这种数据库分离割据的局面导致信息资源分散,数据共享阻滞,形成一个个信息孤岛。笔者经过调研及查阅相关资料,总结出产生信息孤岛的几方面因素:
高等教育和基础教育的教育模式有较大的不同,基础教育的教育内容比较统一、整齐、易管理,因此教育信息化模式容易形成,也易维护。而高等教育则不同,教育层次、教育理念、教学模式、教学管理、学生管理等教育教学因素对于每个高校来说都不尽相同,因此就会导致高等教育的复杂性、特殊性,进而决定了高等教育的信息化不能照搬固有的模式进行规划设计。这些因素导致了一些普遍现象:各部门都有各自较成熟的业务系统软件,而数字化校园平台却一直脱节滞后,不能满足数据同步与资源共享。
目前,影响高校的数字化、信息化水平提高的因素很多,软件环境因素包括网络环境、计算机软件硬件提升等,教育管理因素包括高校招生规模的不断扩大给高校管理带来的管理难度、教育教学理念的不断改进对信息化提出源源不断的需求等,这些都对高校信息化、高校管理软件提出了更高的要求。为了使软件生命周期延长,软件维护非常重要。与此同时,数据孤岛、系统孤岛、业务孤岛等影响数据共享的各类信息孤岛也会随之产生,进而造成新的数据阻滞,影响校园数字化进程。
作为部门业务软件,大多数部门业务人员考虑的是业务需求、功能需求和用户需求,是系统软件完成的输入数据、输出数据和表格是否符合业务规范等内容,很少考虑该系统放到数字化平台上如何预留接口以及如何规范数据标准等。
一般地,即使数字化平台搭建完成后,随着各业务需求的不断产生、网络环境的变化等因素,将会产生昂贵的软件维护费用,比如有时在输出报表中增加一个字段都得需要十几万元的维护费用,还不用说更复杂的需求,如此高额的维护费用经常使需求方难以接受。这样最终会导致平台的可用性下降甚至废弃不用,软件生命周期终止。
这些因素在不同程度上影响着高校数字化进展,而终止信息孤岛、实现数字化平台的数据共享应多从数据库之间的数据同步做起,而不是盲目上马高额费用的、和高校管理需求相差甚远的高校数字化平台。
一般地,高校各部门都拥有了自己的管理软件和数据库,由于这些软件与数字化平台之间没有统一的数据标准和数据接口,所以这些软件很难并入数字化平台,因此也会影响高校数字化建设进程。
其实数据同步的最理想状态,是使多个软件系统的数据或部分数据实时地同步到一个共享平台,供其他软件使用,其最大的优势就是数据实时传输。所以数据同步的实质就是软件系统的某些数据实时传送到共享平台或者直接提供给其他软件使用。例如宿舍管理系统的共享数据可以是学号、姓名、床位ID、班级等字段,学籍管理系统的共享数据可以是学生学号、姓名、班级、学籍状态等字段,当然沟通不同数据库数据需要统一规范各种系统编码,并做好数据的完整性约束。本例中,宿舍管理系统的部分数据同步到云端,以供查宿系统共享。
根据这些基本需求,我们以宿舍管理系统同步数据到查宿系统为例,可以在云端创建一个存放这些共享数据的数据库,通过基于Windows Service的同步系统,将宿舍管理系统的数据实时地同步到云端数据库,供基于手机客户端和Web客户端的查宿系统使用。
校园网中部门的管理软件(以宿舍管理系统为例)是部署在校园局域网的网段中,出于安全考虑,各部门的服务器只允许本部门系统访问,而基于手机端的查宿系统用户部署在Internet中,是不能访问校园网中的宿舍管理系统的。因此需要设计数据同步系统将数据实时传送到查宿系统的数据库中,考虑到信息安全问题,传送的数据不包含诸如身份证号、家庭地址、联系电话等个人信息,只包含姓名、学籍号和床位ID等非个人信息字段。
基于以上功能需求,该系统采用Windows Service方案解决数据同步传输,其中使用了SQL Server触发器技术、C#的Timer技术、VPN技术以及对目标数据库Mysql进行事务管理等以保证数据同步的安全准确。根据对该系统功能需求进行分析,得到了基于Windows Service的数据同步系统拓扑图,如图1所示。
系统体系结构采用C/S模式,源服务器数据库采用SQL SERVER 2008设计,目标服务器数据库采用Mysql设计,Windows Service采用面向对象开发语言C#开发。
1. Microsoft Windows Service(服务)简介
Microsoft WindowsService(服务)是由C#开发的可执行程序,可以在计算机操作系统启动后长时间运行,而且没有任何用户界面,因此这种服务非常适合在服务器上使用,而不受其他应用程序的影响。
图1 基于Windows Service的数据同步拓扑图
2. SQL Server数据库
SQL Server是由Microsoft开发的关系型数据库管理系统,其具有高安全性、可扩展和分布式应用等特点,并非常适用于网络开发。本文所使用的版本为SQL SERVER 2008。
3.MySQL数据库
MySQL是一种关系型数据库管理系统,其最大特点是开放源代码,有高效的执行速度、可靠性和适应性,并非常适用于 WEB 应用开发。
4. C#
C#是Microsoft发布的一种面向对象程序设计语言,运行环境依赖于.NET Framework。C#是C++的升级版,其具有单继承机制,但可通过接口实现多继承。由C#语言可开发可执行应用程序、插件及服务等多种应用程序,其中包括Windows form、Asp.net、class文件以及Windows Service等。
5.SQL SERVER的触发器技术(Trigger)
SQL Server触发器(Trigger)是一种特殊的存储过程,它在外界对表进行增删改等操作时实施触发。deleted 和 inserted是产生在内存中的逻辑表,在对表操作时创建,这些表在结构上和定义触发器的表基本一致,分别保存了用户操作更改的行的旧值和新值。
根据功能需求,以宿舍管理系统的数据同步系统为例,遵循软件工程的思想,得出了基于Windows Service的数据同步系统时序图,如图2所示,该时序图描述了同步系统中参与者及各对象通过消息指令相互协作的时间顺序关系。根据该系统时序图,再对系统进行详细设计。
触发器是能够自动执行的模块,在设计过程中可设置共享字段,并对敏感字段予以回避。本例中,共设计了UPDATE和INSERT两种触发器,分别对班级bj表和在校生zxs表进行跟踪,通过内存表deleted和inserted插入到相应的源数据trigger表中,并打上时间戳,设置是否提交字段等,使同步系统能够差异捕获未提交数据。
图2 Windows Service的数据同步系统时序图
1.zxs(学生表)的INSERT触发器
ALTER TRIGGER [dbo].[zxs_insert] on [dbo].[zxs]
AFTER INSERT
AS BEGIN
insert into zxs_trigger(班级,姓名,…,触发性质,触发时间)
select 班级,姓名,…,‘ins’,getdate() from inserted
END
2.bj(班级表)的UPDATE触发器
ALTER TRIGGER [dbo].[bj_update] on [dbo].[bj]
AFTER UPDATE
AS
if Update(班级名称) … or Update(zxjhdm)
BEGIN
insert into bj_trigger(班级名称,年级,…,触发性质,触发时间,bj_ID) select 班级名称,年级,…,‘upd’,getdate(),ID from inserted
END
1.创建Windows服务项目
打开Microsoft Visual Studio2012,选择C#语言,创建一个Windows服务项目,名称为WindowsService7。
2. Timer控件的myTimer_Elapsed事件设计
(1)重写WindowsService7的OnStart方法,创建一个Timer对象myTimer,Elapsed是Timer事件,时间每次执行触发该事件,myTimer.Interval = 100000是指触发的间隔时间,其中1000个单位为1秒,并将触发状态置为True。
(2)myTimer_Elapsed方法,它调用了 bunkDataFromTo()方法。
void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{ bunkDataFromTo();
}
3. 数据同步bunkDataFromTo()方法
bunkDataFromTo()方法,该方法是整个Windows服务的核心,即数据同步方法。该方法主要有三部分组成:更新班级(class)数据,更新学生(student)数据以及全删全插宿舍床位(bunk)数据,并且根据目标数据库完整性约束模型的数据表之间的外键关联关系进行数据更新。
从数据库完整性模型(图3)可以看出,学生student表的class_id字段、床位bunk表中的student_id字段分别是以班级class表的主键class_id、学生student表中的主键student_id作为外键的,由此设计出三个表的更新顺序,即先更新班级数据,再更新学生数据,最后更新床位数据,又由于班级class和学生student表中都存在其他表的外键依赖,所以更新数据采用数据递增的方式,而床位bunk表因为不存在其他表对它的外键依赖,故采用全删全插的更新方式,以完成数据同步。
图3 目标数据库Mysql数据完整性约束
4. Mysql数据库的事务管理设计
由于Timer一次触发事件可能涉及到万条数据的更新,所以在设计三个表更新的过程中使用了事务管理,即三个表的插入、删除及更新操作均由同一个事务管理。我们知道数据库事务管理具有原子性特征,是指事务包含的所有对数据库的操作,要么全部成功,要么全部失败回滚。这些特性对于数据库操作至关重要,以防数据库脏读、不可重复读和幻读等非法操作,造成数据库数据错误甚至数据库崩溃等数据灾难。
该服务的事务管理是针对目标数据库Mysql中的表做事务管理,所以在建立与目标数据库的连接后,我们声明一个Mysql的事务对象,并开启该事务:
MySqlTransaction myTran;
myTran = conn.BeginTransaction();
然后,在三个表操作过程中,把所有的插入、更新和删除操作都绑定到该事务上等待提交,程序设计步骤为:
(1)对班级class数据的更新或插入操作cmd_mysql_class:
MySqlCommand cmd_mysql_class = new MySqlCommand();
cmd_mysql_class.Transaction = myTran;
(2)对学生student数据的更新或插入操作cmd_mysql_stu:
MySqlCommand cmd_mysql_stu = new MySqlCommand();
cmd_mysql_stu.Transaction = myTran;
(3)对床位bunk数据的删除和插入操作cmd_mysql_stu:
MySqlCommand del_mysql = new MySqlCommand(iCmd, conn);
del_mysql.Transaction = myTran;
MySqlCommand cmd_mysql_in = new MySqlCommand();
cmd_mysql_in.Transaction = myTran;
5. 数据同步事务提交或回滚
通过对myTran事务的提交,即可将数据传输到目标数据库Mysql,若有异常则事务回滚。
…
myTran.Commit();
}
catch (Exception e)
{
myTran.Rollback();
}
6.生成Windows Service项目文件Windows Service7
在Microsoft Visual Studio2012界面,点击生成-生成解决方案即可生成Windows Service项目文件WindowsService7。
7.安装Windows Service服务
打开cmd运行界面,用cd命令切换到C:WindowsMicrosoft.NET
v4.0.30319,该文件夹下有InstallUtil.exe应用程序,用该应用程序对WindowsService7服务进行安装,安装后,在任务管理器的服务界面中即可看到该服务(如图4所示),右键启动后即可运行。
图4安装成功的WindowsService服务
系统以试运行方式,对宿舍管理系统的班级、学生及宿舍资源数据进行数据同步测试,同步速度快,无冲突,8000余条数据仅几秒钟即可完成同步,数据同步准确,测试用例为实时监测源数据库和目标数据库的宿舍床位表,其条目是一致的,基本达到了系统设计预想的目的。
图5 源数据库sszyk和目标数据库bunk的条目数
该数据同步系统有以下优点:一是由于是Windows Service服务,不受外界应用程序的影响;二是数据库之间的数据同步,不影响原有业务系统;三是Windows Service服务因为是点对点的数据同步,所以部署灵活;四是可以方便地对各种异构数据库进行数据同步,易于同步系统的扩展。
综上所述,通过该系统设计,为高校管理软件间的数据同步、资源共享提供了一个行之有效的解决方案。