王建勛,占開金
(中國交通通信信息中心,北京 100011)
技術(shù)研究
內(nèi)存數(shù)據(jù)庫在海事衛(wèi)星系統(tǒng)中的應(yīng)用研究
王建勛,占開金
(中國交通通信信息中心,北京 100011)
本文探討研究了內(nèi)存數(shù)據(jù)庫的系統(tǒng)架構(gòu)、索引算法、日志管理、并發(fā)管理、事務(wù)處理、故障恢復(fù)等,說明了內(nèi)存數(shù)據(jù)庫如何在海事衛(wèi)星運(yùn)營系統(tǒng)中發(fā)揮作用。
內(nèi)存數(shù)據(jù)庫;索引;事務(wù);海事衛(wèi)星
海事衛(wèi)星業(yè)務(wù)進(jìn)入高速發(fā)展時期,市場需求驅(qū)動市場部推出新的業(yè)務(wù)。本文針對海事衛(wèi)星系統(tǒng)面對的挑戰(zhàn),實(shí)時處理的要求,研究探討內(nèi)存數(shù)據(jù)庫(MDB)在該系統(tǒng)中的應(yīng)用,內(nèi)存數(shù)據(jù)庫應(yīng)該如何設(shè)計(jì)及其實(shí)際應(yīng)用和技術(shù)創(chuàng)新。內(nèi)存數(shù)據(jù)庫把數(shù)據(jù)全部或者當(dāng)前工作部分駐留在內(nèi)存中,消除了傳統(tǒng)磁盤數(shù)據(jù)庫系統(tǒng)中I/O瓶頸,極大地提高了系統(tǒng)的性能和吞吐量,從而滿足目前和將來系統(tǒng)面臨的業(yè)務(wù)數(shù)據(jù)挑戰(zhàn)。
2.1 系統(tǒng)架構(gòu)
MDB分為MDB框架和MDB業(yè)務(wù)庫,系統(tǒng)架構(gòu)如圖1所示。
圖1 MDB內(nèi)存數(shù)據(jù)庫系統(tǒng)架構(gòu)
框架獨(dú)立于業(yè)務(wù)邏輯,增加其復(fù)用性,通過接口能適配任何符合接口的MDB業(yè)務(wù)庫,并提供動態(tài)加載和卸載MDB業(yè)務(wù)庫的功能,能實(shí)現(xiàn)無縫加載和卸載。同時業(yè)務(wù)庫開發(fā)也將不再關(guān)心MDB基礎(chǔ)部分的實(shí)現(xiàn),能將主要開發(fā)放在業(yè)務(wù)相關(guān)的實(shí)現(xiàn)上。
2.1.1 框架
實(shí)現(xiàn)基礎(chǔ)的和業(yè)務(wù)無關(guān)的部分,管理系統(tǒng)資源,提供接口給MDB業(yè)務(wù)庫。
⊙ 管理MDB表、打開MDB、關(guān)閉MDB。
⊙ 理與客戶端通信的socket、共享內(nèi)存、信號等。
⊙ 響應(yīng)客戶端消息處理邏輯。
⊙ 管理MDB業(yè)務(wù)庫,支持動態(tài)的加載業(yè)務(wù)庫,卸載業(yè)務(wù)庫等。
⊙ 為MDB業(yè)務(wù)庫提供基本的數(shù)據(jù),并對數(shù)據(jù)做初始化,提供接口給業(yè)務(wù)庫查詢和更新這些數(shù)據(jù)。
⊙ 提供用戶鎖和進(jìn)程鎖資源,提供鎖操作接口,并監(jiān)控用戶鎖的超時信息,在線程退出時自動清除此線程占用的鎖。
2.1.2 業(yè)務(wù)庫
實(shí)現(xiàn)業(yè)務(wù)相關(guān)的部分,注冊支持的消息和業(yè)務(wù)類型,接受客戶端的應(yīng)答請求,對請求包做校驗(yàn),響應(yīng)業(yè)務(wù)庫的業(yè)務(wù)請求,并做應(yīng)答。一個業(yè)務(wù)庫在物理實(shí)現(xiàn)上是一個動態(tài)庫。
2.2 索引算法
主流的存儲引擎索引算法主要有btree和hash兩種。
(1)Hash索引優(yōu)缺點(diǎn)。優(yōu)點(diǎn)是檢索效率非常高,索引的檢索可以一次定位;缺點(diǎn)是不能使用范圍查詢,只能“=”,“IN”和“〈=〉”查詢。
(2)Btree優(yōu)缺點(diǎn)。優(yōu)點(diǎn)是適合范圍查詢,所有葉節(jié)點(diǎn)具有相同的深度,等于樹高h(yuǎn),其查找節(jié)點(diǎn)個數(shù)的漸進(jìn)復(fù)雜度為O(logdN),N為節(jié)點(diǎn)數(shù),d為出度;缺點(diǎn)是存儲空間過大,插入刪除平衡帶來性能的損耗。
Hash索引結(jié)構(gòu)的特殊性,其檢索效率非常高,索引的檢索可以一次定位,Hash索引的查詢效率要遠(yuǎn)高于BTree索引。由于海事衛(wèi)星運(yùn)營系統(tǒng)是針對用戶來說的,業(yè)務(wù)數(shù)據(jù)基本上圍繞用戶產(chǎn)生的,數(shù)據(jù)比較分散,用戶之間關(guān)聯(lián)不多,所以選擇hash作為存儲的索引算法。
2.3 日志管理
日志分系統(tǒng)日志、redo日志、undo日志三種。
(1)系統(tǒng)日志。主要記錄系統(tǒng)運(yùn)行日志、如通信日志、錯誤日志、接口日志等。
(2)Redo日志。記錄DML操作的數(shù)據(jù)、操作對象、操作方法,用于在系統(tǒng)恢復(fù)過程中,重做已提交事務(wù)。
(3)Undo日志。記錄DML操作前的數(shù)據(jù),用于在事務(wù)Abort時回退事務(wù)。
系統(tǒng)維護(hù)全局Redo日志序列,而不維護(hù)Undo日志,由事務(wù)自身維護(hù)私有的Redo日志和Undo日志。在事務(wù)提交時,依照事務(wù)提交的先后順序,同步Redo日志數(shù)據(jù)到硬盤,釋放Undo日志。
2.4 并發(fā)管理
并發(fā)度的多少一般和鎖的類度有關(guān),所以把鎖分等級處理,不同的操作用不同的鎖,一般DML用記錄鎖,這樣可以提高并發(fā)度。
(1)MDB記錄鎖類似于行鎖,支持對MDB表中記錄的關(guān)鍵字加鎖,防止該關(guān)鍵字相關(guān)的記錄進(jìn)行并發(fā)操作,提高程序的準(zhǔn)確性和安全性。
(2)進(jìn)程鎖是控制MDB整個進(jìn)程的鎖,在MDB作內(nèi)存數(shù)據(jù)備份點(diǎn)的時候,需要加上進(jìn)程鎖,阻止此時發(fā)生的業(yè)務(wù)交易。
(3)為了防止上面兩種鎖造成的死鎖,提供了鎖檢測工具,支持對記錄鎖和進(jìn)程鎖超時情況查詢,并提供解鎖服務(wù)。
2.5 事務(wù)處理
事務(wù)處理的隔離級別為ReadCommited,即讀提交,V為排他鎖,S為共享鎖,寫的時候?yàn)閂鎖,讀為S鎖。
SELECT的時候無法重復(fù)讀,即同一個事務(wù)中兩次執(zhí)行同樣的查詢語句,若在第一次與第二次查詢之間時間段,其他事務(wù)又剛好修改了其查詢的數(shù)據(jù)且提交了,則兩次讀到的數(shù)據(jù)不一致。
事務(wù)的ACID屬性只能通過限制數(shù)據(jù)庫的同步更改來實(shí)現(xiàn),從而通過對修改數(shù)據(jù)加鎖來實(shí)現(xiàn)。直到事務(wù)觸發(fā)COMMIT或ROLLBACK語句時鎖才釋放。缺點(diǎn)是后面的事務(wù)必須等前面的事務(wù)完成才能開始執(zhí)行,吞吐量隨著等待鎖釋放的時間增長而遞減,MDB通過行級鎖來最小化鎖競爭。這樣修改同一table里其他行的數(shù)據(jù)沒有限制,而且讀數(shù)據(jù)可以始終沒有等待。
事務(wù)設(shè)計(jì)原則是保證事務(wù)短??;鎖的行越少越好,時間越短越好。
2.6 故障恢復(fù)
故障恢復(fù)流程如圖2所示。
圖2 故障恢復(fù)
⊙ MDB(SLAVE)運(yùn)行為恢復(fù)模式。
⊙ 啟動MDB開始恢復(fù)。MDB在恢復(fù)時每次恢復(fù)完一批redo日志,redo目錄下面對應(yīng)的redo文件會被移動到back目錄。
⊙ MDB基礎(chǔ)庫redo目錄下的redo文件全部移到back目錄,同時查看基礎(chǔ)庫運(yùn)行的log日志,當(dāng)拋出讀取下一個redo日志文件不存在的異常時表明MDB已經(jīng)全部恢復(fù)完成。
⊙ 停止備MDB,自動將最新的MDB數(shù)據(jù)寫到磁盤文件。
⊙ 將備MDB產(chǎn)生的恢復(fù)后的MDB內(nèi)存映像文件拷貝到主MDB目錄,啟動既完成整個恢復(fù)過程。
3.1 功能定位
海事衛(wèi)星業(yè)務(wù)運(yùn)營支撐系統(tǒng),主要有計(jì)費(fèi)、帳務(wù)處理、信用控制、帳務(wù)管理四個模塊,這幾個模塊都有很多數(shù)據(jù)操作,有實(shí)時的,有量大的,而這些數(shù)據(jù)基本上都是存儲在傳統(tǒng)數(shù)據(jù)庫里,嚴(yán)重影響運(yùn)營支撐系統(tǒng)的業(yè)務(wù)處理能力。所以會選擇部分比較重要的數(shù)據(jù)放在MDB里面,MDB會給這四個模塊提供增刪改查操作,MDB與四個模塊的交互結(jié)構(gòu)如圖3所示。
圖3 MDB功能定位
系統(tǒng)為計(jì)費(fèi)、帳務(wù)處理、帳務(wù)管理、信用管理模塊提供實(shí)時的數(shù)據(jù)操作。計(jì)費(fèi)從MDB中取用戶信息,實(shí)時更新帳單到MDB;帳務(wù)處理更新周期性費(fèi)用和一次性費(fèi)用;帳務(wù)管理查詢用戶實(shí)時帳單;信用管理也是查詢實(shí)時帳單。
(1)融合計(jì)費(fèi)本身實(shí)現(xiàn)了四個方面的融合:客戶的融合,即客戶品牌和付費(fèi)方式的融合;業(yè)務(wù)的融合,即實(shí)現(xiàn)跨業(yè)務(wù)、跨產(chǎn)品、跨客戶的產(chǎn)品捆綁、交叉優(yōu)惠,實(shí)現(xiàn)業(yè)務(wù)經(jīng)營與計(jì)費(fèi)策略的完整銜接;計(jì)費(fèi)模式的融合,即將計(jì)費(fèi)提速、OCS實(shí)現(xiàn)融合;最后則是計(jì)費(fèi)對象的融合,即預(yù)付費(fèi)和后付費(fèi)的融合統(tǒng)一。
(2)帳務(wù)處理是指根據(jù)三戶資料和訂購計(jì)劃計(jì)算出周期性費(fèi)用以及一次性費(fèi)用后,將其和批價費(fèi)用等費(fèi)用綜合優(yōu)惠后生成實(shí)時話費(fèi)和帳單的過程。
(3)帳務(wù)管理子系統(tǒng)主要處理用戶帳單生成后,帳單相關(guān)的查詢、打印、繳費(fèi)、銷帳以及用戶預(yù)先交納預(yù)存、押金的使用和管理等相關(guān)業(yè)務(wù)功能。
(4)信控管理子系統(tǒng)實(shí)時運(yùn)行,檢測用戶的話單批價、帳戶的實(shí)時繳費(fèi)銷帳、帳戶的信用度調(diào)整。當(dāng)以上信息變動時,信控管理子系統(tǒng)接受觸發(fā)話單或工單,根據(jù)帳戶的歷史欠費(fèi)、當(dāng)月實(shí)時話費(fèi)、帳戶信用額度、帳戶內(nèi)余額進(jìn)行計(jì)算。根據(jù)信控規(guī)則進(jìn)行催繳、開機(jī)、提醒等動作。
3.2 分析與應(yīng)用
海事衛(wèi)星業(yè)務(wù)運(yùn)營系統(tǒng)分為BILLING計(jì)費(fèi)系統(tǒng)和CRM系統(tǒng),BILLING需要實(shí)時處理大量的數(shù)據(jù),而CRM一般面向運(yùn)營人員,操作量不會太大,所以BILLING系統(tǒng)需要高效實(shí)時的性能。批價是計(jì)費(fèi)系統(tǒng)的重中之重,需要實(shí)時處理大量的話單,這個過程涉及到查詢用戶資料,用戶套餐等用戶信息,更新免費(fèi)資源和累計(jì)量。如果用傳統(tǒng)的數(shù)據(jù)庫,則處理比較慢,很難做到數(shù)據(jù)的實(shí)時更新,因此用內(nèi)存數(shù)據(jù)庫來管理這些數(shù)據(jù)。下面從數(shù)據(jù)選型和部署方式進(jìn)行詳細(xì)分析。
3.2.1 數(shù)據(jù)選型
把最關(guān)鍵的數(shù)據(jù)放到內(nèi)存中,這些數(shù)據(jù)增刪改頻次高,頻繁的IO讀寫,嚴(yán)重影響性能。三戶資料和帳務(wù)相關(guān)數(shù)據(jù),三戶查詢量特別的高,帳戶相關(guān)數(shù)據(jù)特別的多。所以這些數(shù)據(jù)都放入內(nèi)存,避免了頻繁的IO處理,提高了效率,有選擇地選取數(shù)據(jù),又節(jié)省了內(nèi)存。
3.2.2 部署方式
采用雙機(jī)熱備部署方式,實(shí)現(xiàn)了高可用和負(fù)載均衡。雙機(jī)數(shù)據(jù)通過日志同步,外部查詢對數(shù)據(jù)實(shí)時性要求不高的操作可以放在備機(jī)上,更新操作放在主機(jī)上。
3.3 性能指標(biāo)
海事衛(wèi)星應(yīng)用mdb后,處理能力有很大的提升,以下是性能測試數(shù)據(jù)。
主機(jī)環(huán)境:
HP-UX rx66003 B.11.31 U ia64 3822239629 unlimited-user license CPU 2 cores,4 logical processors per socket;Memory:16G。
測試性能數(shù)據(jù):數(shù)據(jù)插入效率為10w/s;8w/s的數(shù)據(jù)更新效率;據(jù)裝載平均加載速度110Mb/s;恢復(fù)速度平均每秒7w次事務(wù)。
3.4 應(yīng)用效果
采用內(nèi)存數(shù)據(jù)庫后,運(yùn)營數(shù)據(jù)得到實(shí)時的處理,批價可以實(shí)時的更新累計(jì)量和帳單,信控可以直接取得內(nèi)存數(shù)據(jù)庫中的實(shí)時話費(fèi)累計(jì)表中的數(shù)據(jù),完全實(shí)現(xiàn)實(shí)時預(yù)警、停機(jī)。對防欺詐、收入保障系統(tǒng)也有相當(dāng)大的好處,這樣能夠充分保證海事衛(wèi)星運(yùn)營商的切身利益。
內(nèi)存數(shù)據(jù)庫在海事衛(wèi)星的應(yīng)用,極大地提高海事衛(wèi)星運(yùn)營系統(tǒng)的處理能力,內(nèi)存數(shù)據(jù)庫,通過避開磁盤的耗時操作,內(nèi)存優(yōu)化的索引結(jié)構(gòu)快速的日志和恢復(fù),高并發(fā)的事務(wù)處理,達(dá)到了高性能的數(shù)據(jù)管理能力,低成本的基礎(chǔ)上大大提高系統(tǒng)的處理能力。大量的數(shù)據(jù)操作通過內(nèi)存數(shù)據(jù)庫集中管理,也增強(qiáng)了海事衛(wèi)星運(yùn)營系統(tǒng)的擴(kuò)展能,能夠滿足海事衛(wèi)星未來幾年的業(yè)務(wù)發(fā)展。
[1] 張曉偉.探討分布式內(nèi)存數(shù)據(jù)庫的設(shè)計(jì)與應(yīng)用[J].硅谷,2009(03)
[2] 王慧嬪.基于MMDB技術(shù)對電信計(jì)費(fèi)系統(tǒng)研究與實(shí)現(xiàn)的探討[J].科技資訊,2009(16)
[3] 王金華,江水,吳嫻,盧瑤,龍剛.輕量級內(nèi)存數(shù)據(jù)庫的研究[J].計(jì)算機(jī)工程,2008(S1)
[4] 王珊,肖艷芹,劉大為,覃雄派.內(nèi)存數(shù)據(jù)庫關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2007(10)
[5] 朱勇,張炯,沈軼.內(nèi)存數(shù)據(jù)庫在移動計(jì)費(fèi)系統(tǒng)中的應(yīng)用[J].現(xiàn)代機(jī)械,2007(05)
Reserch on the Application of RAM Database in the Inmarsat System
Wang Jianxun,Zhan Kaijin
(China Transport Telecommunications &Infomation Center,Beijing,100011)
System architecture,indexing algorithm,log management,concurrency management,transaction processing,fault recovery to explore other aspects of the study,and finally explain how to combine Inmarsat-memory database applications and operating systems in the role.
Memory Database;Index;Transaction;Maritime Satellite
10.3969/J.ISSN.1672-7274.2016.05.002
TN927+.2,TP392 文獻(xiàn)標(biāo)示碼:B
1672-7274(2016)05-0005-04
王建勛,男,1970年生,現(xiàn)任職于中國交通通信信息中心,研究方向?yàn)榻煌ㄐ畔⒒?/p>
占開金,男,1984年生,現(xiàn)任職于中國交通通信信息中心,研究方向?yàn)榻煌ㄐ畔⒒?/p>