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