內存數據庫是以犧牲內存資源為代價換取實時數據處理的。內存數據庫和磁盤數據庫都是當今信息社會每個企業必備的關系數據庫產品。磁盤數據庫解決大容量存儲和數據分析問題,內存數據庫解決實時處理和高並發問題。兩者的存在是相輔相成的,主存數據庫的實時事務處理性能遠遠強於磁盤數據庫。但是相對來說,他的數據安全性還沒有達到磁盤數據庫的水平。
內存數據庫使用物理內存作為數據的第壹存儲介質,磁盤作為備份。隨著電信業務的發展,系統對業務實時、靈活修改的要求非常高。在這種情況下,內存數據庫的需求也在增加。磁盤數據庫的方法是將數據存儲在內存中進行處理,在可管理性和數據安全可靠性上沒有保證。主存數據庫針對這壹弱點進行了改進。
事實上,內存數據庫並不是壹種時髦的技術。60年代末出現,但由於市場需求,90年代末開始發展。作為新壹代數據庫,Altibase產品已經走向混合數據庫,其版本Altibase 4.0已經有了壹套自己的磁盤數據庫。用戶壹旦購買了Altibase的主存數據庫,就不需要購買磁盤數據庫了。它將熱數據(頻繁使用、頻繁訪問和頻繁計算的數據)放在內存數據庫中,將歷史數據放在磁盤數據庫中,可以進壹步減少用戶的投資。
對於內存數據庫,同壹數據庫的壹部分可以存儲在磁盤上,而另壹部分可以存儲在內存中。用戶可以選擇將數據存儲在內存表中,以提供即時數據訪問。如果訪問時間不緊急或者存儲在內存中的數據占用的空間過大,用戶可以將這些數據存儲在磁盤表中。
例如,當移動電話用戶開始撥打電話時,如果應用基於內存數據庫技術的混合數據管理引擎,將通過內存表檢索其服務選項並立即驗證用戶的身份,而通話清單和計費清單將存檔在磁盤表中。因此,實現了速度和資源使用之間的平衡。
內存數據庫技術的壹個很重要的特點是,它可以處理內存中的所有數據,這與僅僅將數據以數組的形式放在內存中是完全不同的。而且主存數據庫是應用無關的,所以顯然這種架構是合理的。內存引擎可以使用完全相同的數據庫實現查詢和存檔功能,而內存表和磁盤表也使用完全相同的訪問方法。存儲的選擇對應用程序開發人員來說是完全透明的。
對於內存數據庫來說,它實現了對內存中數據的管理,而不僅僅是作為數據庫的緩存。與其他將磁盤數據塊緩存到主存中的數據庫不同,主存數據庫的內存引擎使用了專門為隨機訪問內存而設計的數據結構和算法,避免了使用排序命令經常破壞緩存數據庫性能的問題。通過主存數據庫減少磁盤I/O,可以達到傳統的基於磁盤I/O的數據庫無法與之相比的處理速度。
因此,內存數據庫技術的應用可以大大提高數據庫的速度,為電信、金融等需要高速響應的數據庫應用提供了強有力的支持。
由於大部分數據是在內存中操作的,內存數據庫的性能遠高於磁盤數據庫,非常適合電信企業運營支撐系統的實時性要求。
電信行業競爭全方位發展,必然帶來新的價值鏈模式和新的收費方式。這些變化對現有的電信運營支撐系統提出了挑戰。比如各種業務的計費環節將不再基於時長或通信距離,而可能基於時長、內容、使用量等各種參數的組合。為了應對這些挑戰,電信企業引入了內存數據庫來提高後臺數據管理的實時性、準確性和靈活性。
雖然主存數據庫不再是傳統磁盤數據庫的概念,但本質上它仍然是壹個數據庫,而且它還具有壹般數據庫的基本功能:
■永久數據的管理,包括數據庫的定義、存儲和維護;
■完成各種數據操作,如查詢處理、訪問和完整性檢查;
■事務管理,包括調度和並發控制;
■出入控制和安全檢查;
■擁有數據庫可靠性恢復機制。
與通過程序開發的方式調用內存處理相比,內存數據庫有其自身的優勢。首先,主存數據庫是基於產品的數據庫管理軟件,大大縮短了開發周期;其次,主存數據庫具有開放的平臺和接口,使得程序開發和移植更加靈活方便,也便於維護和二次開發;第三,可以使用統壹的SQL語言方便地查詢內存中的數據;最後,數據庫中數據的安全性和完整性可以得到保證。這些優點有利於快速部署和簡化維護。
但是主存數據庫也有其不可避免的缺點,比如:不容易恢復,主存數據庫中的數據並不總是永久的,而且為了保證實時性,也不壹定是壹致和絕對正確的,有的是短暫的,有的是暫時不壹致或不絕對正確的。
電信企業壹直是內存數據庫的主要用戶。近年來,隨著計算機硬件技術的飛速發展,內存容量的提高,價格的下降以及計算機進入64位時代操作系統後可以支持更大的地址,使得主存數據庫的實現成為可能。目前,內存數據庫在電信行業的應用越來越成熟。90G以上電信系統案例,可自動擴展內存空間,提供ESOL自定義存儲過程,無需重啟數據庫,支持多線程,開發效率高,程序移植方便。
下面舉兩個例子來介紹內存數據庫的應用。
電信計費數據的加載
電信的二次價格審批和實時賬戶累計是計費系統中必不可少的兩個功能。
所謂二批價,是相對於壹批價而言的。
壹個價格核定就是按照國家標準資費計算價格。比如GSM的本地通話,每分鐘0.4元。第壹次價格審批完成後,會根據用戶的套餐再次計算。以北京全球通用戶打4分鐘電話為例。第壹次價格審批後,該話費的價格為1.6元。如果這個用戶參加的是10元的包月套餐,那麽第二次價格審批後,這個通話的費用就是0元。
第壹次價格審批用於各大運營商之間的結算,第二次價格審批針對個人用戶。
實時話費累計是將用戶從每月1到現在的所有費用進行累計,即用戶可以通過10086查詢到截至前壹天的實時話費。累計賬戶價值可以幫助用戶控制高額話費,或者為用戶提供即時的消費信息。
二次價格審批和實時賬戶累加的過程涉及用戶數據、用戶套餐等用戶相關信息,電信支撐系統在啟動價格審批時必須加載這些數據。稍微大壹點的省級運營商的數據會超過654.38+00萬,由於套餐、產品、不同優惠規則的組合,計費處理模型相當復雜。加載這些數據對系統來說是壹筆很大的開銷,使得目前的計費處理速度很慢,很難實時更新數據。內存數據庫的引入在壹定程度上解決了這個問題。
數據量最大的是第二次收費過程中的明細賬單數據。這部分數據不需要放在內存數據庫中。當處理壹個票據文件或達到設定的提交記錄數時,直接操作磁盤數據庫,不會影響系統性能。當務之急是把用戶數據、套餐、業務套餐和計費套餐對應的數據、計費套餐型號數據和累積的用戶數據存入內存數據庫。這部分數據查詢操作遠比數據添加和更新操作頻繁。當然,除了這些數據之外,應用程序所需的其他數據也可以加載到主存數據庫中。
使用內存數據庫後,用戶可以通過營業部或客戶查詢實時話費,與目前只能查詢到前壹天的實時話費相比,業務上有了質的飛躍。由於在處理這部分數據時,系統的查詢過程與之前完全相同,因此系統省去了內存中的數據與磁盤數據庫中的數據之間的同步鏈接,因此可以實現實時查詢。信貸控制也是如此。以前系統要在賬戶累計後按照壹定周期刷新信貸控制數據,所以有時間差,不能完全實時。
使用內存數據庫後,信號控制可以直接獲取內存數據庫中的實時話費累計表中的數據,完全實現實時預警和關機。在二次價格審批和累計賬戶中使用內存數據庫後,對反欺詐和收入保障體系也大有裨益,可以充分保障經營者的切身利益。
此外,使用內存數據庫後,系統價格審批和累計賬目的處理速度整體提升,訪問磁盤數據庫的壓力大大緩解,數據查詢、修改、刪除效率提高,還可以實現後付費和前付費的整合。
電信計費數據的同步
電信業務數據和計費系統中的數據總是在變化的,這就涉及到內存數據庫中的數據和磁盤數據庫中的數據的同步問題(為了清楚起見,這裏的磁盤數據庫是以Oracle DB為例來說明的)。數據同步包括兩個部分:內存數據庫到Oracle DB的數據同步和Oracle DB到內存數據庫的數據同步。
1.從Oracle數據庫到內存數據庫的同步
這部分數據同步采用增量表的方式,業務系統或CRM新增或更新的數據會生成到Oracle的增量表中,計費後臺程序會先查詢這些增量表中的數據。如果能在這些增量表中找到數據,則將數據更新到主存數據庫的對應表中,如果找不到,則直接從主存數據庫中查詢數據,從而保證數據的完整性和實時性。因為增量表的數據量壹般較小,所以這部分操作不會影響系統的性能。
2.從內存數據庫到Oracle數據庫的同步
因為Oracle的計費後臺批量價格和累計賬戶數據幾乎全部加載到內存數據庫中,所以Oracle數據庫對應的數據表將主要用於內存數據庫的數據備份。
用戶最新的實時話費等信息存儲在內存數據庫中,實時話費查詢將直接連接到內存數據庫,確保用戶獲得最新的費用信息。信息控制也是直接從主存數據庫中查詢數據,所以在Oracle中對這部分數據沒有實時性要求。此時,可以由應用程序生成主存數據庫與Oracle的同步,定時同步備份到Oracle數據庫,也可以在系統相對空閑期間,使用Oracle存儲過程導入數據。
總的來說,由於市場和技術的快速發展,電信業務不斷擴大,運營和管理不斷優化。壹些傳統的支持系統已經逐漸不能滿足日益增長的業務要求和客戶需求,因此不可避免地要引入壹些新技術來解決我們在生產中遇到的問題。比如用內存數據庫來代替以前的內存共享技術,讓內存中不標準的東西,包括接口、格式、管理都標準化了。
主存數據庫只是眾多新技術中具有代表性的壹種。只要我們解放思想,選擇得當,完全可以用很少的投入克服制度上的瓶頸,以最小的成本獲得最大的回報。
我們看到了很多通用數據庫,比如最近比較流行的Oracle,Db2,Sqlserver,Sybase,Informix,Mysql,Pqllite。當然,我們也不能忘記開源的PostgreSQL。通常,這些數據庫可以承擔重要的業務,但在要求高性能方面仍略顯不足。在計費系統中,如果用戶信息變化頻繁,延遲會產生很大的影響,甚至影響計費系統的正常運行。
我接觸到的唯壹壹個內存數據庫是亞信在中國移動計費中心的審計系統中使用的。因為審計系統需要同步用戶狀態信息和訂閱信息,然後對生成的賬單進行審計,如果響應速度慢,會產生錯誤的結果。剛開始沒有審核系統的時候,收費標準基本都是sp發的。然而,用戶經常發現,當他們沒有實際使用這項服務或取消這項服務時,他們仍然在賬單中收取費用。因此,中國移動決心對sp的賬單進行審計,以自己的數據為標準,徹底切斷sp的收費手段。
如果要獲取用戶狀態信息和訂閱信息,需要從多個系統同步,同時要審核對話單。中間的處理時間要求嚴格(用戶可能會在短時間內查看自己的話費信息),對系統的響應時間要盡可能短。
通用數據庫在這方面處於劣勢。亞信以三臺rx8420作為數據庫主機,將31個省份的用戶信息按照編號共享給三臺主機。每個省至少有壹個入庫流程,對於用戶較多的,采用多個流程進行入庫。數據收集的來源主要是通過BOSS和壹級計費系統。
因為數據存儲在內存中,所以存儲的數據結構與壹般數據庫不同。同時為了保證數據的安全,磁盤上有內存數據的鏡像,每隔壹段時間就將內存中的數據同步到磁盤上,當主機出現故障時可以通過磁盤恢復數據。當主機出現故障時,備用主機將通過HA接管。但是數據操作的日誌和回滾不如Oracle,只提供了簡單的恢復機制。
在計費系統中,首先要對sp發來的賬單進行審核,主要標準是用戶狀態和訂閱信息。例如,用戶已經關機7天,如果新的訂購信息出現在服務提供商的賬單中,該賬單將被視為錯誤賬單。這樣移動就在與sp的博弈中占據了主動。審計系統上線後,用戶對sp的投訴明顯減少。
鏈接1:內存數據庫與傳統數據庫的異同
傳統的數據庫系統是關系型數據庫,開發這種數據庫的目的是為了處理永久穩定的數據。關系數據庫強調維護數據的完整性和壹致性,但難以兼顧相關數據及其處理的時序限制,不能滿足工業生產管理實時應用的需要,因為實時事務需要系統準確預測事務的運行時間。
對於磁盤數據庫,由於磁盤訪問、數據進出內存、緩沖區管理、隊列等待和鎖延遲,事務的實際平均執行時間與估計的最壞情況執行時間有很大不同。如果將整個數據庫或其主要的“工作”部分放入內存,那麽每個事務在執行過程中將沒有I/O,這將為系統準確估計和安排事務的運行時間提供有力的支持,並使其更具動態性和可預測性。這是內存數據庫出現的主要原因。
內存數據庫處理的數據通常是“瞬態”的,即有壹定的有效時間,過時了就會產生新的數據,當前的決策推演就失效了。因此,在實際應用中,內存數據庫用於處理實時業務邏輯處理數據。而傳統的數據庫以處理永久穩定的數據為目標,其性能目標是高系統吞吐量和低成本,所以數據的實時處理要考慮的相對較少。在實際應用中,傳統數據庫用於存儲實時性要求相對較低的數據。
在實際應用中,這兩種數據庫經常結合使用,而不是用主存數據庫代替傳統數據庫。
鏈接2:幾種內存數據庫產品
■甲骨文時報
Oracle TimesTen是Oracle從Timeten公司收購的壹款內存優化的關系數據庫,為應用程序提供實時企業和行業(如電信、資本市場和國防)所需的即時響應能力和極高的吞吐量。Oracle TimesTen可以作為緩存或嵌入式數據庫部署在應用層,使用標準的SQL接口,完全在物理內存中操作數據存儲區。
■ Altibase
Altibase是壹個軟件解決方案,在事務優先的環境中提供高性能和高可用性。它提供高性能、容錯和事務管理能力,特別適用於通信、網上銀行、證券交易、實時應用和嵌入式系統。Altibase可以最大限度地發揮數據庫服務系統的潛力,增強數據服務器的處理能力。Altibase支持客戶端/服務器架構或嵌入式架構。客戶機/服務器體系結構非常適合壹般的應用程序。嵌入式架構將應用程序嵌入到數據庫服務器中,適用於實時性要求高的實時系統。
■極限b
eXtremeDB實時數據庫是McObject公司專門為實時和嵌入式系統數據管理設計的數據庫,開銷為50K到130K,速度為微秒級。EXtremeDB完全駐留在主存中,不使用文件系統(包括內存磁盤)。EXtremeDB采用了全新的磁盤融合技術,將內存擴展到磁盤,將磁盤作為虛擬內存。實時性能為微秒級,32BIT時數據管理容量可達20G。