• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種通過(guò)數(shù)據(jù)庫(kù)微改造提升對(duì)接移動(dòng)互聯(lián)網(wǎng)能力的方法

      2018-03-02 00:22:07畢凱峰
      軟件 2017年9期
      關(guān)鍵詞:數(shù)據(jù)量變化數(shù)據(jù)庫(kù)

      畢凱峰

      摘要:隨著我國(guó)“互聯(lián)網(wǎng)+”戰(zhàn)略的不斷推進(jìn),公共服務(wù)對(duì)接移動(dòng)互聯(lián)網(wǎng)需求不斷凸顯的同時(shí),也為服務(wù)單位帶來(lái)了內(nèi)部系統(tǒng)升級(jí)改造的成本壓力,本文通過(guò)對(duì)接業(yè)務(wù)系統(tǒng)和移動(dòng)互聯(lián)網(wǎng)的實(shí)踐經(jīng)驗(yàn),介紹了一套對(duì)系統(tǒng)改動(dòng)小、成本低的對(duì)接方法,并通過(guò)數(shù)據(jù)對(duì)比體現(xiàn)了該方法的優(yōu)勢(shì)。

      關(guān)鍵詞:互聯(lián)網(wǎng)+;公共服務(wù);數(shù)據(jù)庫(kù);Change Notification;微信服務(wù)號(hào)

      1 理論及背景

      當(dāng)前我國(guó)“互聯(lián)網(wǎng)+”戰(zhàn)略不斷推進(jìn),互聯(lián)網(wǎng)正與傳統(tǒng)產(chǎn)業(yè)及服務(wù)進(jìn)行著更加深度的融合。目前,我國(guó)公共服務(wù)單位已經(jīng)普遍建成滿足業(yè)務(wù)需要的信息系統(tǒng),根據(jù)諾蘭( Richard.L.Nolan)的信息系統(tǒng)進(jìn)化的階段模型[11( Nolan stage model),處于由控制階段( Stage III Control)向集成階段(StageIV Integration)發(fā)展時(shí)期,即由多個(gè)系統(tǒng)分別處理數(shù)據(jù)向多系統(tǒng)集成、數(shù)據(jù)集中過(guò)渡,系統(tǒng)在滿足內(nèi)部使用方面都較為完善。

      然而,完善的內(nèi)部系統(tǒng)在對(duì)接以微信服務(wù)號(hào)、支付寶生活號(hào)為典型代表的“互聯(lián)網(wǎng)+”服務(wù)后也體現(xiàn)出了短板,主要體現(xiàn)在傳統(tǒng)軟件開(kāi)發(fā)思路下建設(shè)的系統(tǒng)中,很少考慮對(duì)移動(dòng)互聯(lián)網(wǎng)等外部平臺(tái)主動(dòng)進(jìn)行數(shù)據(jù)推送的功能,而類(lèi)似“業(yè)務(wù)辦理進(jìn)度在微信端通過(guò)模板消息進(jìn)行推送”的服務(wù)恰恰要求業(yè)務(wù)系統(tǒng)能主動(dòng)對(duì)外發(fā)起數(shù)據(jù)對(duì)接和交互,這項(xiàng)關(guān)鍵功能的缺失給很多單位帶來(lái)了系統(tǒng)升級(jí)的負(fù)擔(dān),如何使這些系統(tǒng)適應(yīng)移動(dòng)互聯(lián)網(wǎng)趨勢(shì),成為了“互聯(lián)網(wǎng)+公共服務(wù)”發(fā)展過(guò)程中的一個(gè)必須解決的問(wèn)題。

      2 方案設(shè)計(jì)

      業(yè)務(wù)系統(tǒng)根據(jù)數(shù)據(jù)對(duì)外部系統(tǒng)進(jìn)行主動(dòng)推送的能力可支撐多種移動(dòng)互聯(lián)網(wǎng)服務(wù),能夠給用戶帶來(lái)很多便利,比如燃?xì)忾_(kāi)戶業(yè)務(wù)辦理的實(shí)時(shí)進(jìn)度就可以對(duì)用戶進(jìn)行推送,及時(shí)提醒用戶提交材料是否需要補(bǔ)充、審核是否已經(jīng)完成、上門(mén)安裝人員是否已經(jīng)接單、更改上門(mén)時(shí)間的方法等,但對(duì)外推送這些信息的功能在之前建立的業(yè)務(wù)系統(tǒng)中都是沒(méi)有的,像舊版的燃?xì)饪蛻舴?wù)系統(tǒng)中對(duì)數(shù)據(jù)的使用就主要局限在“增、刪、查、改”四種操作中,如要增加對(duì)外推送信息功能,傳統(tǒng)的解決方式有兩種:

      (1)對(duì)業(yè)務(wù)系統(tǒng)進(jìn)行改造,增加消息推送系統(tǒng)接口。這種方法需要一定的改造費(fèi)用,且需要原開(kāi)發(fā)廠商配合,這實(shí)際增加了整個(gè)服務(wù)平臺(tái)的建設(shè)成本。

      (2)讓移動(dòng)互聯(lián)網(wǎng)平臺(tái)去適應(yīng)業(yè)務(wù)系統(tǒng),比如在業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)中記錄數(shù)據(jù)變更時(shí)間或錄入時(shí)間,通過(guò)移動(dòng)互聯(lián)網(wǎng)平臺(tái)定期對(duì)業(yè)務(wù)系統(tǒng)數(shù)據(jù)變更時(shí)間進(jìn)行查詢,發(fā)現(xiàn)最新時(shí)間段內(nèi)業(yè)務(wù)數(shù)據(jù)更新,則將這些信息推送給用戶。這種方法如果檢查間隔時(shí)間太短,則會(huì)給移動(dòng)互聯(lián)網(wǎng)平臺(tái)和業(yè)務(wù)系統(tǒng)帶來(lái)巨大的性能壓力,掃描時(shí)間間隔太大則會(huì)使信息通知和實(shí)際業(yè)務(wù)狀態(tài)之間出現(xiàn)一定的差異。

      兩種解決方式都有明顯的缺點(diǎn),而經(jīng)過(guò)實(shí)驗(yàn)和測(cè)試,數(shù)據(jù)庫(kù)本身的“變更通知”功能也是解決該問(wèn)題的一種值得推薦的方法。

      “變更通知”的作用就是當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生變化的時(shí)候,自動(dòng)發(fā)出一個(gè)通知給應(yīng)用系統(tǒng)。Oracle lOg Release2及以上的Change Notification和部分版本的SQL Server Notification Services服務(wù)都可以實(shí)現(xiàn)該功能。以O(shè)racle中的變更通知Change Notification為例,該功能可以在你指定的表數(shù)據(jù)發(fā)生變化時(shí)給出-個(gè)通知,變更通知支持監(jiān)控的數(shù)據(jù)庫(kù)變化包括:

      (1)數(shù)據(jù)庫(kù)狀態(tài)變化:?jiǎn)?dòng)和關(guān)閉數(shù)據(jù)庫(kù);

      (2)數(shù)據(jù)庫(kù)對(duì)象變化(包括表結(jié)構(gòu)變化和表刪除、表數(shù)據(jù)變更如插入、刪除、更新等)。

      監(jiān)控中發(fā)現(xiàn)數(shù)據(jù)出現(xiàn)變化后,數(shù)據(jù)庫(kù)推送的通知可以包含以下內(nèi)容:

      (1)發(fā)生變化的數(shù)據(jù)庫(kù)名;

      (2)發(fā)生變化的數(shù)據(jù)庫(kù)表;

      (3)發(fā)生變更的時(shí)間;

      (4)發(fā)生了哪種類(lèi)型的變更;

      (5)發(fā)生變更的數(shù)據(jù)RowID。

      通過(guò)以上數(shù)據(jù),系統(tǒng)就能夠準(zhǔn)確定位發(fā)生變更的數(shù)據(jù),并進(jìn)行相應(yīng)的操作,由于整個(gè)監(jiān)控過(guò)程采用數(shù)據(jù)庫(kù)本身的機(jī)制進(jìn)行,不會(huì)給系統(tǒng)增加額外的負(fù)擔(dān)。

      3 方案實(shí)現(xiàn)與效果對(duì)比

      下面以通過(guò)Oracle的Change Notification功能將客戶服務(wù)系統(tǒng)中的業(yè)務(wù)辦理進(jìn)度變化推送到微信服務(wù)號(hào)為例,為實(shí)現(xiàn)該需求,我們?cè)O(shè)計(jì)并搭建了一套用于微信服務(wù)號(hào)的接口與客戶服務(wù)系統(tǒng)進(jìn)行數(shù)據(jù)對(duì)接(如圖1):

      (1)微信服務(wù)接口首先通過(guò)Oracle數(shù)據(jù)庫(kù)的ODP.NET( Oracle Data Provider for .NET是Oracle專(zhuān)門(mén)為基于.NET的應(yīng)用程序設(shè)計(jì)的一套接口)向數(shù)據(jù)庫(kù)注冊(cè)所需監(jiān)控的查詢,見(jiàn)圖1①;

      (2 )Oracle數(shù)據(jù)庫(kù)根據(jù)注冊(cè)查詢對(duì)存儲(chǔ)工單進(jìn)度的表格進(jìn)行監(jiān)控,見(jiàn)圖1②;

      (3)工單表發(fā)生變化時(shí)數(shù)據(jù)庫(kù)通過(guò)ChangeNotification功能由ODP.NET向微信服務(wù)號(hào)接口發(fā)送通知,通知中包含了變更類(lèi)型和變更數(shù)據(jù)的RowID,見(jiàn)圖1③;

      (4)微信服務(wù)號(hào)接口接到通知后,可以根據(jù)RowID對(duì)變更后的數(shù)據(jù)進(jìn)行查詢,根據(jù)查詢到的數(shù)據(jù)便可以通知用戶發(fā)生的變化,見(jiàn)圖1④。

      實(shí)現(xiàn)該方案的核心代碼如下,實(shí)現(xiàn)的具體功能為點(diǎn)擊按鈕后開(kāi)始監(jiān)控?cái)?shù)據(jù)庫(kù)表tb cns的變更,出現(xiàn)變更時(shí)顯示變更信息,點(diǎn)擊另一按鈕后結(jié)束監(jiān)控;其中程序開(kāi)頭需對(duì)ODP.NET中的三個(gè)命名空間:

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

      Oracle.DataAccess.Types進(jìn)行引用。

      OracleDependencydep;

      OracleConnection conn;

      OracleDependency.Port= 49500;endprint

      //用于設(shè)置接收Change Notification的端口號(hào)。

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

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

      conn= newOracleConnection(cs),

      conn.Open();

      OracleComman{icmd=newOracleCommand(select術(shù)from

      th_cns”,conn);

      //綁定OracleCommand實(shí)例。

      dep= newOracleDependency(cmd);

      //綁定OracleDependency實(shí)例。

      dep.QueryBasedNotification= false;

      //設(shè)置指定通知是“基于對(duì)象”類(lèi)型, “基于對(duì)象”

      表示表中任意數(shù)據(jù)變化時(shí)都會(huì)發(fā)出通知。

      dep.Rowidlnfo= OracleRowidlnfo.lnclude;

      //該設(shè)置使Notification中包含變化數(shù)據(jù)對(duì)應(yīng)的Rowld。

      dep.OnChange+=

      newOnC hangeEventHandler(OnNotificaton);

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

      cmd.Notification.IsNotifiedOnce= false;

      //表示是否一次性的通知,如果設(shè)置為T(mén)rue,使用后會(huì)立即移除此次注冊(cè)。

      cmd.Notification.Timeout=0:

      //注冊(cè)的超時(shí)時(shí)間(秒),超時(shí)后注冊(cè)將被自動(dòng)移除,0表示不超時(shí)。

      cmd.Notification.IsPersistent= true;

      //True表示通知存于數(shù)據(jù)庫(kù)中,F(xiàn)alse表示存于內(nèi)存中,

      存在數(shù)據(jù)庫(kù)中可以保證即便數(shù)據(jù)庫(kù)重啟之后,通知仍然不會(huì)丟失。

      OracleDataReaderodr= cmd.ExecuteReader0;

      this.richTextBoxI.AppendText(“Registration completed.”

      + DateTime.Now.ToLongTimeString()+

      Environment.NewLine);

      }

      privatevoid OnNotific aton(ohj ectsrc,

      Oracle Notific ationEventArgsarg)

      {//變更事件處理方法,在此方法中對(duì)

      OracleNotificationEventArgs進(jìn)行解析并顯示

      DataTabledt= arg.Details;

      //從arg.Details中獲得通知細(xì)節(jié)數(shù)據(jù),包括變化數(shù)據(jù)的

      Rowld,變化類(lèi)型等

      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);)));//展示變化數(shù)據(jù),其中包括接受到變化通知的時(shí)間、變化數(shù)據(jù)的RowID、變化類(lèi)型;

      }

      運(yùn)行程序后開(kāi)始監(jiān)聽(tīng),在數(shù)據(jù)庫(kù)中更新一條數(shù)據(jù)并在數(shù)據(jù)的Change Time字段記錄變更發(fā)生時(shí)的系統(tǒng)時(shí)間,更新提交后,程序會(huì)接收到數(shù)據(jù)庫(kù)通知,顯示變更類(lèi)型為數(shù)據(jù)更新,變更時(shí)間為9:25:13,變更的數(shù)據(jù)Rowld為AAAM/GAAFAAAAHYAAE,根據(jù)該Rowld查詢到對(duì)應(yīng)數(shù)據(jù)的變更時(shí)間為9:25:08。

      通過(guò)以上例程可以看到,Change Notiflcation方案外部系統(tǒng)可以在極短的時(shí)間內(nèi)獲取到Oracle數(shù)據(jù)庫(kù)中的變更數(shù)據(jù);為將Change Notification方案與傳統(tǒng)方案在不同數(shù)據(jù)量條件下獲取變更數(shù)據(jù)的時(shí)間進(jìn)行比較,我們假設(shè)數(shù)據(jù)庫(kù)某條數(shù)據(jù)變更時(shí)記錄的變更時(shí)間為tl,變更通知中記錄的通知接收時(shí)間為t2,則ChangeNotifcation方案中外部系統(tǒng)獲取數(shù)據(jù)變更通知耗時(shí)為t“,其中t“= t2-tl,外部系統(tǒng)獲取通知后,根據(jù)RowID查詢變更數(shù)據(jù)的耗時(shí)為tp,則ChangeNotification方案下獲取變更數(shù)據(jù)的整體耗時(shí)為(tα+tβ);另設(shè)通過(guò)檢查數(shù)據(jù)變更時(shí)間查詢到變更數(shù)據(jù)的耗時(shí)為tY,則在同一數(shù)據(jù)庫(kù)中,不同數(shù)據(jù)量情況下的tα、tβ、tγ記錄見(jiàn)表一,tα、tβ和tγ隨數(shù)據(jù)量變化趨勢(shì)見(jiàn)圖2:

      從圖2可以看出,采用Change Notiflcation方案(變更通知方案)在數(shù)據(jù)量增加時(shí)的耗時(shí)相對(duì)穩(wěn)定,而數(shù)據(jù)變更時(shí)間檢查的方式耗時(shí)隨著數(shù)據(jù)量增加而不斷上漲,在數(shù)據(jù)量越來(lái)越大的背景下,采用Change Notiflcation方案在系統(tǒng)運(yùn)行耗時(shí)上無(wú)疑更有優(yōu)勢(shì)。

      4 結(jié)語(yǔ)

      經(jīng)分析和測(cè)試,通過(guò)使用Change Notification方案可以解決較早建立的業(yè)務(wù)系統(tǒng)沒(méi)有信息推送接口的問(wèn)題,業(yè)務(wù)系統(tǒng)本身不需要進(jìn)行大改造就能提供根據(jù)業(yè)務(wù)變化進(jìn)行數(shù)據(jù)主動(dòng)推送的功能,實(shí)現(xiàn)了互聯(lián)網(wǎng)服務(wù)水平關(guān)鍵能力的升級(jí),特別適合系統(tǒng)迭代周期相對(duì)較長(zhǎng)的政府部門(mén)和公共服務(wù)單位。因此,進(jìn)行業(yè)務(wù)系統(tǒng)升級(jí)改造對(duì)接移動(dòng)互聯(lián)網(wǎng)服務(wù)時(shí)不妨考慮采用此方法。endprint

      猜你喜歡
      數(shù)據(jù)量變化數(shù)據(jù)庫(kù)
      基于大數(shù)據(jù)量的初至層析成像算法優(yōu)化
      計(jì)算Lyapunov指數(shù)的模糊C均值聚類(lèi)小數(shù)據(jù)量法
      高刷新率不容易顯示器需求與接口標(biāo)準(zhǔn)帶寬
      從9到3的變化
      寬帶信號(hào)采集與大數(shù)據(jù)量傳輸系統(tǒng)設(shè)計(jì)與研究
      電子制作(2019年13期)2020-01-14 03:15:18
      這五年的變化
      特別文摘(2018年3期)2018-08-08 11:19:42
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      肃南| 永城市| 合作市| 长汀县| 华容县| 南阳市| 彩票| 长垣县| 天门市| 龙里县| 论坛| 庆阳市| 金塔县| 黔江区| 蓬溪县| 南阳市| 阿坝县| 汉沽区| 龙山县| 阜新市| 五莲县| 江山市| 金塔县| 宜川县| 东宁县| 鹿泉市| 晋城| 云浮市| 南陵县| 平潭县| 九江县| 河池市| 成都市| 合作市| 古交市| 喀什市| 竹溪县| 互助| 泗阳县| 盐边县| 湄潭县|