亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        在線計(jì)費(fèi)系統(tǒng)中內(nèi)存數(shù)據(jù)庫(kù)的研究與應(yīng)用

        2012-08-22 11:05:26鄒永平
        科技視界 2012年27期
        關(guān)鍵詞:備機(jī)計(jì)費(fèi)紀(jì)錄

        鄒永平 毛 蔚

        (1.江蘇無(wú)錫交通高等職業(yè)技術(shù)學(xué)校組織人事處 江蘇 無(wú)錫 214151;2.江蘇無(wú)錫交通高等職業(yè)技術(shù)學(xué)校繼續(xù)教育部 江蘇 無(wú)錫 214151)

        0 引言

        圖1 系統(tǒng)結(jié)構(gòu)圖

        為了提高現(xiàn)有的在線計(jì)費(fèi)產(chǎn)品在國(guó)際市場(chǎng)的優(yōu)勢(shì),決定通過(guò)自主研發(fā)一套高度獨(dú)立的、快速的、安全的、易用的內(nèi)存數(shù)據(jù)庫(kù),來(lái)代替TimesTen[1],同時(shí)能夠無(wú)縫的與現(xiàn)有系統(tǒng)進(jìn)行對(duì)接,并將CustCache、RuleCache進(jìn)行替換,簡(jiǎn)化現(xiàn)有系統(tǒng)的復(fù)雜度,降低系統(tǒng)的耦合度。通過(guò)這套系統(tǒng),可以在各個(gè)計(jì)費(fèi)版本中進(jìn)行推廣,為在線計(jì)費(fèi)系統(tǒng)提供一套完整的、可控的解決方案。這個(gè)專為計(jì)費(fèi)系統(tǒng)而生的內(nèi)存數(shù)據(jù)庫(kù)就是Quick Memory DataBase,本文簡(jiǎn)稱QMDB或者M(jìn)iniDB。

        本文主要是針對(duì)計(jì)費(fèi)領(lǐng)域中的數(shù)據(jù)處理,考慮了計(jì)費(fèi)數(shù)據(jù)的特點(diǎn)和技術(shù)難度,摒棄TimesTen的一些特性,增加幾點(diǎn)功能:支持多平臺(tái)運(yùn)行,QMDB也必須能在AIX、HP、Solaries、Linux和Windows平臺(tái)上面運(yùn)行。這是設(shè)計(jì)的第一個(gè)要求,其次,針對(duì)計(jì)費(fèi)系統(tǒng)的高可靠性和實(shí)時(shí)性,QMDB必須能夠應(yīng)對(duì)系統(tǒng)發(fā)生故障的例外情況,就是主備機(jī)同步的。第三,由于計(jì)費(fèi)系統(tǒng)的處理數(shù)據(jù)都存于Oracle數(shù)據(jù)庫(kù)中,所以,QMDB也必須要支持?jǐn)?shù)據(jù)與Oracle系統(tǒng)的同步[2-3]。

        1 系統(tǒng)結(jié)構(gòu)圖

        圖1說(shuō)明:

        a)系統(tǒng)結(jié)構(gòu)圖中右邊的虛線部分表示與其他主機(jī)進(jìn)行數(shù)據(jù)傳輸。

        b)接口進(jìn)程G通過(guò)消息方式與其他進(jìn)程交互,不僅限于數(shù)據(jù)接收進(jìn)程F,還可以包括Oracle數(shù)據(jù)更新進(jìn)程(指O-racle數(shù)據(jù)變更后,數(shù)據(jù)需要同步過(guò)來(lái))、沖值進(jìn)程、開戶進(jìn)程、SID等等沒(méi),只要這些進(jìn)程滿足我們約定的格式要求就可以。

        c)外部系統(tǒng)(指除去本機(jī)上面運(yùn)行的計(jì)費(fèi)相關(guān)進(jìn)程),所有涉及非只讀表的修改(包括插入、更新、刪除)都必須通過(guò)接口進(jìn)程G處理,對(duì)于Java進(jìn)程可以直接從Oracle讀取數(shù)據(jù),對(duì)于C++的程序,則可以通過(guò)系統(tǒng)接口直接訪問(wèn)。

        d)本次設(shè)計(jì)主要考慮主要需求,對(duì)于像遠(yuǎn)程客戶端的設(shè)計(jì)、ODBC設(shè)計(jì),暫時(shí)不予考慮,隨著項(xiàng)目的深入再追加設(shè)計(jì)。

        e)程序中關(guān)于數(shù)據(jù)存儲(chǔ),采用 INT8、INT16、 INT32、INT64來(lái)表示,而不是用short。

        f)Int、long 等表示,方便直觀。

        2 主備機(jī)同步模塊

        2.1 主備同步相關(guān)配置

        配置文件的配置

        QMDB的配置文件是以QuickMDB_XXX.xml命名的,其中“xxx”為內(nèi)存數(shù)據(jù)庫(kù)名,為大寫。具體配置項(xiàng)的含義以及配置參考《QuickMDB配置說(shuō)明》,在這里主要突出與主備機(jī)同步模塊相關(guān)的配置項(xiàng):

        is-rep這個(gè)需要配置成“Y”,如果配置為“N”則不啟動(dòng)主備同步進(jìn)程;

        rep-type這表的列的一個(gè)屬性,這個(gè)配置項(xiàng)需要配置成“MDB2MDB”,表示是從 active 同步到 standby。

        2.2 QMDB數(shù)據(jù)同步到備機(jī)

        應(yīng)用程序QMDB里的數(shù)據(jù),這個(gè)數(shù)據(jù)需要同步到備機(jī),以保證QMDB與備機(jī)的一致。

        2.2.1 流程說(shuō)明

        1)應(yīng)用程序?qū)MDB變更的同時(shí)將變更動(dòng)作以以下的形式寫入主備機(jī)刷新緩存隊(duì)列:

        2)mdbFlushRep進(jìn)程從刷新緩存隊(duì)列中取出數(shù)據(jù)并生成相應(yīng)的文件,具體情況如下:初始化生成的文件名為Rep_***,其中***為進(jìn)程ID,當(dāng)主備機(jī)同步緩存中的記錄條數(shù)達(dá)到2000條的時(shí)候或同步時(shí)間間隔超出配置大小(配置項(xiàng):log-time)或文件大小超出配置大小(配置項(xiàng):file-size),則重命名Rep_PID為Rep_PID.xxxx.OK,其中xxxx為文件序列號(hào)。并重新生成Rep_***(其中***為進(jìn)程ID)文件。

        3)啟動(dòng)mdbRep進(jìn)程用于讀取文件記錄,并轉(zhuǎn)換成相應(yīng)的SQL語(yǔ)句發(fā)送備機(jī)執(zhí)行。

        2.2.2 流程操作

        1)從日志目錄中獲取Rep_xxxx.*.OK文件(其中xxxx表示進(jìn)程ID,*表示文件編號(hào))(.ok文件才會(huì)被同步);

        2)解析Rep_xxxx.*.OK文件中的每條記錄,生成相應(yīng)的SQL并形成主備交互協(xié)議報(bào)文發(fā)送到備機(jī)執(zhí)行,處理完后刪除Rep_xxxx.*.OK,(考慮性能,都采用異步方式,不等待備機(jī)端響應(yīng)結(jié)果)。

        2.3 啟動(dòng)邏輯

        第一次啟動(dòng)時(shí),先要判斷對(duì)端是否已經(jīng)啟動(dòng),如果對(duì)端沒(méi)有啟動(dòng),則本機(jī)直接從Oracle上載數(shù)據(jù),上載完畢,數(shù)據(jù)庫(kù)處于正常運(yùn)行狀態(tài)。

        如果對(duì)端已經(jīng)啟動(dòng),則首先從備機(jī)上載數(shù)據(jù),發(fā)送“數(shù)據(jù)從備機(jī)上載”的命令。這個(gè)流程是按照單表進(jìn)行的,表上面有狀態(tài),主機(jī)收到同步的指令后,會(huì)把所有需要同步數(shù)據(jù)的表狀態(tài)設(shè)定為“待同步”,然后取一個(gè)表,將其狀態(tài)改為“正在同步”,此時(shí)這個(gè)表的變更數(shù)據(jù)需要落地,當(dāng)數(shù)據(jù)同步完畢,表狀態(tài)變?yōu)椤罢M健?,換句話說(shuō),所有同步的文件都須要落地。當(dāng)所有的表都同步完畢,數(shù)據(jù)庫(kù)處于正常狀態(tài)。

        流程說(shuō)明:

        1)應(yīng)用程序?qū)uickMDB變更的同時(shí)將變更動(dòng)作以一下的形式寫入主備機(jī)刷新緩存隊(duì)列:

        2)mdbFlushRep進(jìn)程從刷新緩存隊(duì)列中取出數(shù)據(jù)并生成相應(yīng)的文件,具體情況如下:

        初始化生成的文件名為Rep_***,其中***為進(jìn)程ID,當(dāng)主備機(jī)同步緩存中的記錄條數(shù)達(dá)到2000條的時(shí)候或同步時(shí)間間隔超出配置大小(配置項(xiàng):log-time)或文件大小超出配置大小 (配置項(xiàng):file-size),則重命名 Rep_PID為Rep_PID.xxxx.OK,其中xxxx為文件序列號(hào).并重新生成Rep_***(其中***為進(jìn)程ID)文件。

        3)啟動(dòng)mdbRep進(jìn)程用于讀取文件記錄,并轉(zhuǎn)換成相應(yīng)的SQL語(yǔ)句發(fā)送備機(jī)執(zhí)行。

        流程操作:

        1)從日志目錄中獲取Rep_xxxx.*.OK文件(其中xxxx表示進(jìn)程ID,*表示文件編號(hào))(.ok文件才會(huì)被同步);

        2)解析Rep_xxxx.*.OK文件中的每條記錄,生成相應(yīng)的SQL并形成主備交互協(xié)議報(bào)文(見上面的協(xié)議說(shuō)明)發(fā)送到備機(jī)執(zhí)行,處理完后刪除Rep_xxxx.*.OK,(考慮性能,都采用異步方式,不等待備機(jī)端響應(yīng)結(jié)果)。

        3 Oracle同步模塊

        3.1 詳細(xì)描述

        1)QMDB全量上載Oracle 數(shù)據(jù)是在QMDB創(chuàng)建這個(gè)環(huán)節(jié)完成的,當(dāng)創(chuàng)建好表空間,表結(jié)構(gòu)等的時(shí)候就開始上載數(shù)據(jù)了。上載Oracle中哪些表的數(shù)據(jù)是根據(jù)QMDB的配置項(xiàng)(QuickMDB_xxx.XML)來(lái)決定的,即創(chuàng)建了哪些表就需要上載哪些表的數(shù)據(jù)例如:

        圖2 XML內(nèi)容,配置了表cust,上載的時(shí)候就會(huì)上載oracle中cust表的數(shù)據(jù)

        2)為了提高上載效率和速度,QuickMDB采用了多線程上載的方法,即為每個(gè)表空間創(chuàng)建一個(gè)線程,每個(gè)表空間的下的表就用對(duì)應(yīng)的線程加載。

        3)上載步驟:

        (1)根據(jù)配置項(xiàng)拼裝出查詢語(yǔ)句,插入語(yǔ)句等;(2)根據(jù)查詢語(yǔ)句得到oracle的返回結(jié)果集;

        (3)根據(jù)結(jié)果集拼裝插入語(yǔ)句,插入到QuickMDB中。

        3.1.1 驗(yàn)證同步結(jié)果

        啟動(dòng)mdbSQL,命令如下:mdbSQL dsn名輸入如下命令:select count(*)from表名查看紀(jì)錄數(shù)是否和oracle數(shù)據(jù)庫(kù)的紀(jì)錄數(shù)相同

        3.2 Oracle增量同步到QMDB

        由于某些原因Oracle數(shù)據(jù)庫(kù)表中的紀(jì)錄優(yōu)先于Quick-MDB發(fā)生變化了,這時(shí)候需要將Oracle表中的增量的紀(jì)錄同步到QuickMDB中,以保證Oracle表和QuickMDB表的數(shù)據(jù)一致性。

        3.2.1 詳細(xì)描述

        假設(shè)A表發(fā)生增量變化,同步流程如下:

        1)Oracle中存在一個(gè)對(duì)應(yīng)于A表的觸發(fā)器,當(dāng)A表發(fā)生變化時(shí),觸發(fā)器會(huì)向MDB_CHANGE_NOTIF表插入一條描述A表變化的紀(jì)錄,結(jié)構(gòu)如表1。

        表1 MDB_CHANGE_NOTIF表結(jié)構(gòu)

        2)mdb_change_notify_seq表結(jié)構(gòu)如表2。

        表2 mdb_change_notify_seq表結(jié)構(gòu)

        根據(jù)dsn_name查詢mdb_change_notify_seq表,得到Update_time,然后用 Update_time去查詢MDB_CHANGE_NOTIFf表,查出 MDB_CHANGE_NOTIF表中Update_time比mdb_change_notify_seq表中Update_time大的紀(jì)錄,即查出還沒(méi)有更新的紀(jì)錄,根據(jù)查出紀(jì)錄的Key_info和Table_name字段找出需要更新呢的整條紀(jì)錄更新到QuickMDB中。

        3)oracle中存在Job,定時(shí)的掃描mdb_change_notify_seq表,找出其中最小的Update_time,然后用該Update_time去刪除MDB_CHANGE_NOTIF表中所有時(shí)間比Update_time小的紀(jì)錄,即刪除所有IP已經(jīng)更新過(guò)的紀(jì)錄。

        3.2.2 樣例

        mdb_change_notify_seq表存在一條紀(jì)錄:

        ip:10.40.45.4;dsn_name:mdbTest;update_time:2010-11-15 01:00:00

        mdb_change_notify表存在一條紀(jì)錄:

        charge_notify_id:1;Table_name:cust;Key_info:5;Update_time:2010-11-1502:00:00;Action_type:I

        從mdb_change_notify_seq表中紀(jì)錄看出,mdbTest最后一次更新時(shí)間為2010-11-15 01:00:00,而同步表中有一條紀(jì)錄,update_time 為 2010-11-15 02:00:00,比最后更新時(shí)間還要晚,也就是這條記錄還沒(méi)更新,cust的主鍵為cust_id,通過(guò)Key_info:5, 得到如下查詢語(yǔ)句:select*from cust where cust_id=5,執(zhí)行得到需要更新的紀(jì)錄,又根據(jù)Action_type:I,得知更新操作為插入,于是組裝Insert語(yǔ)句,插入到QMDB中,并更新mdb_change_notify_seq表的update_time字段為2010-11-15 02:00:00。

        3.2.3 驗(yàn)證同步結(jié)果

        啟動(dòng)mdbSQL,命令如下:mdbSQL dsn名輸入如下命令:select count(*)from表名查看紀(jì)錄數(shù)是否和oracle數(shù)據(jù)庫(kù)的紀(jì)錄數(shù)相同

        4 小結(jié)

        引入QMDB內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)后,對(duì)于計(jì)費(fèi)系統(tǒng)帶來(lái)的一些明顯的優(yōu)勢(shì)。首先,QMDB作為一個(gè)獨(dú)立的系統(tǒng),通過(guò)類似ODBC接口的形式,被應(yīng)用程序調(diào)用,采用動(dòng)態(tài)連接庫(kù)的方式加載到應(yīng)用系統(tǒng)中,QMDB的任何變動(dòng)和升級(jí),都不會(huì)影響到應(yīng)用程序,所以系統(tǒng)可以在不影響應(yīng)用的情況下升級(jí)、修正;其次,可以解決系統(tǒng)中存在多種數(shù)據(jù)的情況,因?yàn)槟壳跋到y(tǒng)中的數(shù)據(jù)存儲(chǔ)機(jī)制非常復(fù)雜,有Oracle數(shù)據(jù)、TimesTen數(shù)據(jù)、CustCache數(shù)據(jù)和RuleCache數(shù)據(jù),每次變更表結(jié)構(gòu)或者增加表信息,都需要變動(dòng)相應(yīng)的應(yīng)用代碼,這給應(yīng)用帶來(lái)了一定的復(fù)雜度和不穩(wěn)定性,開發(fā)人員不得不抽出一定的時(shí)間進(jìn)行開發(fā)、驗(yàn)證,測(cè)試也要分配人員進(jìn)行相關(guān)的測(cè)試驗(yàn)證,這樣毫無(wú)疑問(wèn)會(huì)分散開發(fā)、測(cè)試人員的精力。

        通過(guò)QMDB內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)的存儲(chǔ)機(jī)制將變?yōu)閮?nèi)存數(shù)據(jù)庫(kù)數(shù)據(jù)和Oracle數(shù)據(jù)兩種,極大地簡(jiǎn)化系統(tǒng)的復(fù)雜度,而且當(dāng)應(yīng)用的表結(jié)構(gòu)發(fā)生變動(dòng)時(shí),不必修改相應(yīng)的代碼,只要變更一下腳本就可以處理,讓開發(fā)人員有更多地精力去處理業(yè)務(wù)邏輯;第三,由于現(xiàn)有的內(nèi)存數(shù)據(jù)庫(kù)TimesTen的價(jià)格十分昂貴,采用QMDB可以降低產(chǎn)品的采購(gòu)成本,創(chuàng)造市場(chǎng)機(jī)會(huì),提高企業(yè)利潤(rùn)。

        [1]劉云升.現(xiàn)代數(shù)據(jù)庫(kù)技術(shù)[M].1 版.北京:國(guó)防工業(yè)出版社,2009:238-314

        [2]朱穎輝.OCS 在線計(jì)費(fèi)系統(tǒng)解決方案[J].電信網(wǎng)技術(shù),2010(1).

        [3]周媛,苗耀峰.內(nèi)存數(shù)據(jù)庫(kù)及其技術(shù)淺談[J].煤炭技術(shù),2011(11).

        猜你喜歡
        備機(jī)計(jì)費(fèi)紀(jì)錄
        出租車計(jì)費(fèi)的秘密
        5G網(wǎng)絡(luò)獨(dú)立組網(wǎng)中融合計(jì)費(fèi)方案的研究
        生活中的分段計(jì)費(fèi)
        出版紀(jì)錄
        《科教·紀(jì)錄》
        電影故事(2016年5期)2016-06-15 20:27:30
        《科教·紀(jì)錄》
        電影故事(2015年41期)2015-09-06 02:30:09
        儀表著陸系統(tǒng)下滑臺(tái)備機(jī)故障的分析與解決
        中國(guó)刷新一箭多星紀(jì)錄
        紫光云計(jì)算機(jī)升級(jí) 支持信息化建設(shè)
        紫光云計(jì)算機(jī)升級(jí)虛擬化模塊
        国产麻豆国精精品久久毛片 | √天堂中文官网8在线| 亚洲欧美性另类春色| 少妇隔壁人妻中文字幕| 国产不卡精品一区二区三区| 天天爽夜夜爱| 亚洲精品中文字幕无乱码麻豆 | 欧美国产亚洲日韩在线二区| 午夜不卡av免费| 亚洲中文字幕av天堂| 亚洲一区在线二区三区 | 亚洲啪啪色婷婷一区二区| 免费a级毛片在线播放不收费| 五月天激情婷婷婷久久| 亚州毛色毛片免费观看| 一本色道加勒比精品一区二区| 无码人妻丰满熟妇啪啪网不卡| 精品久久人人爽天天玩人人妻| 亚洲中文无码精品久久不卡| 日本一区二区三区四区在线视频| 大学生粉嫩无套流白浆| 亚洲色大成网站www尤物| 国产高清一区在线观看| 亚洲综合自拍偷拍一区| 性欧美老人牲交xxxxx视频| a观看v视频网站入口免费| 国产精品一区一区三区| 新婚少妇无套内谢国语播放 | 精品九九人人做人人爱| 国产精品亚洲一区二区无码| 丰满少妇高潮在线观看| 男人的天堂一区二av| 亚洲av无码专区电影在线观看| 亚洲av成人一区二区三区网址| 中文字幕人乱码中文字幕乱码在线| 中文字幕亚洲综合久久菠萝蜜| 日本一区二区三区高清千人斩| 国产高潮精品一区二区三区av | 另类内射国产在线| 国产精品伦人视频免费看| 亚洲成人精品在线一区二区|