一种通过数据库微改造提升对接移动互联网能力的方法

2018-03-02 00:22毕凯峰
软件 2017年9期
关键词:数据量变化数据库

毕凯峰

摘要:随着我国“互联网+”战略的不断推进,公共服务对接移动互联网需求不断凸显的同时,也为服务单位带来了内部系统升级改造的成本压力,本文通过对接业务系统和移动互联网的实践经验,介绍了一套对系统改动小、成本低的对接方法,并通过数据对比体现了该方法的优势。

关键词:互联网+;公共服务;数据库;Change Notification;微信服务号

1 理论及背景

当前我国“互联网+”战略不断推进,互联网正与传统产业及服务进行着更加深度的融合。目前,我国公共服务单位已经普遍建成满足业务需要的信息系统,根据诺兰( Richard.L.Nolan)的信息系统进化的阶段模型[11( Nolan stage model),处于由控制阶段( Stage III Control)向集成阶段(StageIV Integration)发展时期,即由多个系统分别处理数据向多系统集成、数据集中过渡,系统在满足内部使用方面都较为完善。

然而,完善的内部系统在对接以微信服务号、支付宝生活号为典型代表的“互联网+”服务后也体现出了短板,主要体现在传统软件开发思路下建设的系统中,很少考虑对移动互联网等外部平台主动进行数据推送的功能,而类似“业务办理进度在微信端通过模板消息进行推送”的服务恰恰要求业务系统能主动对外发起数据对接和交互,这项关键功能的缺失给很多单位带来了系统升级的负担,如何使这些系统适应移动互联网趋势,成为了“互联网+公共服务”发展过程中的一个必须解决的问题。

2 方案设计

业务系统根据数据对外部系统进行主动推送的能力可支撑多種移动互联网服务,能够给用户带来很多便利,比如燃气开户业务办理的实时进度就可以对用户进行推送,及时提醒用户提交材料是否需要补充、审核是否已经完成、上门安装人员是否已经接单、更改上门时间的方法等,但对外推送这些信息的功能在之前建立的业务系统中都是没有的,像旧版的燃气客户服务系统中对数据的使用就主要局限在“增、删、查、改”四种操作中,如要增加对外推送信息功能,传统的解决方式有两种:

(1)对业务系统进行改造,增加消息推送系统接口。这种方法需要一定的改造费用,且需要原开发厂商配合,这实际增加了整个服务平台的建设成本。

(2)让移动互联网平台去适应业务系统,比如在业务系统数据库中记录数据变更时间或录入时间,通过移动互联网平台定期对业务系统数据变更时间进行查询,发现最新时间段内业务数据更新,则将这些信息推送给用户。这种方法如果检查间隔时间太短,则会给移动互联网平台和业务系统带来巨大的性能压力,扫描时间间隔太大则会使信息通知和实际业务状态之间出现一定的差异。

两种解决方式都有明显的缺点,而经过实验和测试,数据库本身的“变更通知”功能也是解决该问题的一种值得推荐的方法。

“变更通知”的作用就是当数据库中的数据发生变化的时候,自动发出一个通知给应用系统。Oracle lOg Release2及以上的Change Notification和部分版本的SQL Server Notification Services服务都可以实现该功能。以Oracle中的变更通知Change Notification为例,该功能可以在你指定的表数据发生变化时给出-个通知,变更通知支持监控的数据库变化包括:

(1)数据库状态变化:启动和关闭数据库;

(2)数据库对象变化(包括表结构变化和表删除、表数据变更如插入、删除、更新等)。

监控中发现数据出现变化后,数据库推送的通知可以包含以下内容:

(1)发生变化的数据库名;

(2)发生变化的数据库表;

(3)发生变更的时间;

(4)发生了哪种类型的变更;

(5)发生变更的数据RowID。

通过以上数据,系统就能够准确定位发生变更的数据,并进行相应的操作,由于整个监控过程采用数据库本身的机制进行,不会给系统增加额外的负担。

3 方案实现与效果对比

下面以通过Oracle的Change Notification功能将客户服务系统中的业务办理进度变化推送到微信服务号为例,为实现该需求,我们设计并搭建了一套用于微信服务号的接口与客户服务系统进行数据对接(如图1):

(1)微信服务接口首先通过Oracle数据库的ODP.NET( Oracle Data Provider for .NET是Oracle专门为基于.NET的应用程序设计的一套接口)向数据库注册所需监控的查询,见图1①;

(2 )Oracle数据库根据注册查询对存储工单进度的表格进行监控,见图1②;

(3)工单表发生变化时数据库通过ChangeNotification功能由ODP.NET向微信服务号接口发送通知,通知中包含了变更类型和变更数据的RowID,见图1③;

(4)微信服务号接口接到通知后,可以根据RowID对变更后的数据进行查询,根据查询到的数据便可以通知用户发生的变化,见图1④。

实现该方案的核心代码如下,实现的具体功能为点击按钮后开始监控数据库表tb cns的变更,出现变更时显示变更信息,点击另一按钮后结束监控;其中程序开头需对ODP.NET中的三个命名空间:

Orac,le.DataAccess、Oracle.DataAccess.Client币口

Oracle.DataAccess.Types进行引用。

OracleDependencydep;

OracleConnection conn;

OracleDependency.Port= 49500;endprint

//用于设置接收Change Notification的端口号。

stringcs=”User Id =****;Password=****;Data

Source=********”:

conn= newOracleConnection(cs),

conn.Open();

OracleComman{icmd=newOracleCommand(select术from

th_cns”,conn);

//绑定OracleCommand实例。

dep= newOracleDependency(cmd);

//绑定OracleDependency實例。

dep.QueryBasedNotification= false;

//设置指定通知是“基于对象”类型, “基于对象”

表示表中任意数据变化时都会发出通知。

dep.Rowidlnfo= OracleRowidlnfo.lnclude;

//该设置使Notification中包含变化数据对应的Rowld。

dep.OnChange+=

newOnC hangeEventHandler(OnNotificaton);

//指定收到通知后的事件处理方法。

cmd.Notification.IsNotifiedOnce= false;

//表示是否一次性的通知,如果设置为True,使用后会立即移除此次注册。

cmd.Notification.Timeout=0:

//注册的超时时间(秒),超时后注册将被自动移除,0表示不超时。

cmd.Notification.IsPersistent= true;

//True表示通知存于数据库中,False表示存于内存中,

存在数据库中可以保证即便数据库重启之后,通知仍然不会丢失。

OracleDataReaderodr= cmd.ExecuteReader0;

this.richTextBoxI.AppendText(“Registration completed.”

+ DateTime.Now.ToLongTimeString()+

Environment.NewLine);

}

privatevoid OnNotific aton(ohj ectsrc,

Oracle Notific ationEventArgsarg)

{//变更事件处理方法,在此方法中对

OracleNotificationEventArgs进行解析并显示

DataTabledt= arg.Details;

//从arg.Details中获得通知细节数据,包括变化数据的

Rowld,变化类型等

this.richTextBox I.Dispatcher.Beginlnvoke(

DispatcherPriority.Normal,

newAction(0=>

{this.richTextBoxl.AppendText("Notification Received.”

+ DateTime.Now.ToLongTimeString()+” Changed

data(rowid):“+arg.Details.Rows[O]["rowid"].ToString()+"

Change Type:"+arg.Info.ToString0+

Environment.NewLine);)));//展示变化数据,其中包括接受到变化通知的时间、变化数据的RowID、变化类型;

}

运行程序后开始监听,在数据库中更新一条数据并在数据的Change Time字段记录变更发生时的系统时间,更新提交后,程序会接收到数据库通知,显示变更类型为数据更新,变更时间为9:25:13,变更的数据Rowld为AAAM/GAAFAAAAHYAAE,根据该Rowld查询到对应数据的变更时间为9:25:08。

通过以上例程可以看到,Change Notiflcation方案外部系统可以在极短的时间内获取到Oracle数据库中的变更数据;为将Change Notification方案与传统方案在不同数据量条件下获取变更数据的时间进行比较,我们假设数据库某条数据变更时记录的变更时间为tl,变更通知中记录的通知接收时间为t2,则ChangeNotifcation方案中外部系统获取数据变更通知耗时为t“,其中t“= t2-tl,外部系统获取通知后,根据RowID查询变更数据的耗时为tp,则ChangeNotification方案下获取变更数据的整体耗时为(tα+tβ);另设通过检查数据变更时间查询到变更数据的耗时为tY,则在同一数据库中,不同数据量情况下的tα、tβ、tγ记录见表一,tα、tβ和tγ随数据量变化趋势见图2:

从图2可以看出,采用Change Notiflcation方案(变更通知方案)在数据量增加时的耗时相对稳定,而数据变更时间检查的方式耗时随着数据量增加而不断上涨,在数据量越来越大的背景下,采用Change Notiflcation方案在系统运行耗时上无疑更有优势。

4 结语

经分析和测试,通过使用Change Notification方案可以解决较早建立的业务系统没有信息推送接口的问题,业务系统本身不需要进行大改造就能提供根据业务变化进行数据主动推送的功能,实现了互联网服务水平关键能力的升级,特别适合系统迭代周期相对较长的政府部门和公共服务单位。因此,进行业务系统升级改造对接移动互联网服务时不妨考虑采用此方法。endprint

猜你喜欢
数据量变化数据库
基于大数据量的初至层析成像算法优化
计算Lyapunov指数的模糊C均值聚类小数据量法
从9到3的变化
宽带信号采集与大数据量传输系统设计与研究
鸟的变化系列
“让路”让出的变化