複製鏈接
請複製以下鏈接發送給好友

內存數據庫

鎖定
內存數據庫,顧名思義就是將數據放在內存中直接操作的數據庫。相對於磁盤,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁盤上訪問能夠極大地提高應用的性能。
中文名
內存數據庫
外文名
main memory database
定    義
將數據放在內存直接操作的數據庫
下    設
數據庫系統DBS
最大特點
“主拷貝”常駐內存

內存數據庫數據庫簡介

內存數據庫拋棄了磁盤數據管理的傳統方式,基於全部數據都在內存中重新設計了體系結構,並且在數據緩存、快速算法、並行操作方面也進行了相應的改進,所以數據處理速度比傳統數據庫的數據處理速度要快很多,一般都在10倍以上。內存數據庫的最大特點是其“主拷貝”或“工作版本”常駐內存,即活動事務只與實時內存數據庫的內存拷貝打交道。
定義:設有數據庫系統DBS,DB為DBS中的數據庫,DBM(t)為在時刻t,DB在內存的數據集,DBM(t)屬於DB。TS為DBS中所有可能的事務構成的集合。AT(t)為在時刻t處於活動狀態的事務集,AT(t)屬於TS。Dt(T)為事務T在時刻t所操作的數據集,
Dt(T)屬於DB。若在任意時刻t,均有:
任意T屬於AT(t) Dt(T)屬於DBM(t)
成立,則稱DBS為一個內存數據庫系統,簡稱為MMDBS;DB為一個內存數據庫,簡稱為MMDB。
常見的例子有MySQL的MEMORY存儲引擎、eXtremeDB、TT、FastDBSQLite、Microsoft SQL Server Compact等

內存數據庫關鍵技術

MMDB除了具有一般數據庫的特徵外,又具有自己的特殊性質,其關鍵技術的實現具有特殊性。
MMDB關鍵技術有:⑴數據結構;⑵MMDB索引技術;⑶查詢處理與優化;⑷事務管理;⑸併發控制;⑹數據恢復。
MMDB不同於DRDB,DRDB技術在內存數據庫中不再適用,要對這些關鍵技術進行新的研究。
存儲性能要求
在許多的數據庫應用系統中,尤其在電話程控交換領域,對數據的訪問性能有很高的要求。這類應用一般都有很高的事務量,又要求有很低的事務響應延遲,而且對數據庫的可靠性有很高的要求,例如一個電話交換的應用,每秒鐘會對數據庫有數千個查詢或者更新請求,每個請求要求有低於50毫秒的響應延遲,並且在一年中數據庫只能有數分鐘的停機時間。MMDB系統能夠滿足這些數據庫應用的要求,但是這需要MMDB系統的各個部件在實現方式和策略上,為應用做最大的優化。
存儲方案
MMDB中的存儲模型比DRDB更加靈活。在傳統的MMDB中,為了考慮對內存空間的利用,在系統中專門開闢一塊空間來存放記錄中各個屬性的值,同時,將記錄中屬性值用指針來替換,指針實際指向存儲在堆中的屬性值。這種存儲方案,在使用初期確實節省了大量的內存空間。尤其在記錄中有大量重複值的情況下。並且由於記錄中各個字段只存放4個字節長(32位環境下)的指針,因此記錄可以很好的支持變長記錄的存儲,不需要再像DRDB系統中那樣,在記錄頭部存放偏移量來支持變長字段的存儲。但是這種存儲方案沒有很好的考慮到對處理器緩存的利用。通過指針間接訪問數據,幾乎相當於在內存空間中的隨機訪問,嚴重影響了緩存的利用率。尤其在64位的計算環境不斷普及,內存的容量理論上可以達到無限,同時內存的價格在不斷下降,但是內存的訪問速度仍然沒有達到處理器的速度的情況下。因此。在傳統MMDB系統中,這種利用指針來節省內存空間,卻忽視緩存作用的存儲模式,在現在的應用環境下,反而有點得不償失。
可以説,先進的數據庫應用程序越來越注重對內存的訪問效率,高性能的數據庫系統因而必須最大限度的利用處理器緩存,將可能被用到的數據緩存在多層次的緩存中。數據放置的位置對於緩存的利用優化尤其重要。選擇好的數據存放方案,改進數據分佈的空間局部性,能夠提高對緩存的利用率,提升性能。目前新的數據存儲方案的設計思路集中於對記錄內部各個屬性值的存儲佈局做調整,能夠按照需求訪問記錄中的部分屬性,從而消除不必要的內存訪問所帶來的內存延遲。因此,在本文中,提出一種在MMDB系統中使用的數據存儲方法。它仍然在記錄中存放實際的值,但是為緩存的利用做了優化。

內存數據庫數據加載

電信的二次批價和實時累賬是計費系統中的兩個必備功能。所謂二次批價是相對於一次批價來説的。一次批價是按照國家標準資費來進行價格計算,比如: 全球通每分鐘本地通話為0.4元,在一次批價完成後,會根據這個用户的套餐進行再一次的計算。以北京全球通用户接聽4分鐘的電話為例,一次批價完成後,這條話單的價格是1.6元,如果這個用户參加了10元包月接聽套餐,那麼在二次批價後,這次通話的費用就為0元。一次批價是用於各大運營商之間結算的,而二次批價是針對用户個人的。
實時累賬是將用户從每月1號到目前為止的所有費用累加起來,也就是用户目前可以通過10086查到截止到前一天的實時話費。累賬值可以幫助用户控制高額話費或是供用户即時查詢消費信息。
二次批價和實時累賬過程涉及用户資料、用户套餐等與用户相關的信息,電信支撐系統在開始批價時必須加載這些數據。稍大一點的省級運營商的這些數據就會超過1000萬條,計費處理模型也由於套餐的組合、產品的組合以及不同的優惠規則變得相當複雜,加載這部分數據對系統而言是一筆不小的開銷,這就使得現在的計費處理速度比較慢,而且很難做到對數據的實時更新。內存數據庫的引入在一定程度上解決了這個問題。
在計費二次批價過程中數據量最大的是詳單數據,這部分數據不用放在內存數據庫中,每處理完一個話單文件或達到設定的提交記錄數時直接操作磁盤數據庫,不會影響系統性能。最急切的是將用户資料、套餐、營業套餐和計費套餐對應關係數據、計費套餐模型數據及用户累計數據放到內存數據庫中,這部分數據查詢操作遠比數據新增和更新操作要頻繁。除了這些數據外,當然還有應用需要的其他數據也都可以加載到內存數據庫。
在採用內存數據庫後,用户通過營業部或客户查詢實時話費的時候完全可以做到實時,比目前只能提供查詢到前一天的實時話費在業務上有了質的飛躍。因為系統在處理這部分數據時查詢流程和以前的完全一樣,但系統省去了以往內存中的數據和磁盤數據庫數據同步的環節,所以就能做到了實時查詢。對於信控來説也同樣,以往系統在累完賬後要按照一定週期刷新信控數據,這就存在一個時間差,不能夠完全做到實時。
而採用內存數據庫後,信控可以直接取得內存數據庫中的實時話費累計表中的數據,完全實現實時預警、停機。二次批價和累賬中採用內存數據庫後,對防欺詐、收入保障系統也有相當大的好處,這樣能夠充分保證運營商的切身利益。
另外,在採用內存數據庫後,整體提高了系統批價、累賬的處理速度,大大緩解訪問磁盤數據庫的壓力,提高數據查詢、修改、刪除的效率,也為後付費和預付費的融合提供了可能。

內存數據庫數據同步

電信營業數據和計費系統中的數據總是在不斷的變化中,這就涉及內存數據庫中的數據和磁盤數據庫數據的同步問題(為了描述清楚,這裏的磁盤數據庫以Oracle DB為例來説明)。數據同步包括兩部分: 從內存數據庫到Oracle DB數據同步和從Oracle DB到內存數據庫的同步。
Oracle DB到內存數據庫同步
這部分數據同步採用增量表的方式,營業系統或CRM新增或更新的數據將生成到Oracle的增量表中,計費後台程序先到這些增量表中查詢數據。如果能在這些增量表中查到數據就把這些數據更新到內存數據庫對應表中,如果查不到,就直接從內存數據庫中直接查詢,從而保證了數據的完整性和實時性。由於增量表的數據量一般會很小,所以這部分操作不會影響系統的性能。
內存數據庫到Oracle DB同步
由於Oracle的計費後台批價、累賬數據幾乎都加載到了內存數據庫中,所以Oracle數據庫對應的數據表將主要用於對內存數據庫的數據備份。
用户最新的實時話費等信息都保存在內存數據庫中,實時話費查詢將直接連接到內存數據庫中查詢,保證用户得到最新的費用信息。信控也直接從內存數據庫查詢數據,因此對Oracle中的這部分數據已經沒有實時性的要求。這時內存數據庫到Oracle的同步可以由應用程序生成文件,定時地往Oracle數據庫中同步備份,或者採用Oracle存儲過程在系統相對空閒時間段進行數據導入就可以了。
內存數據庫與傳統數據庫的異同
傳統的數據庫系統關係型數據庫,開發這種數據庫的目的,是處理永久、穩定的數據。關係數據庫強調維護數據的完整性、一致性,但很難顧及有關數據及其處理的定時限制,不能滿足工業生產管理實時應用的需要,因為實時事務要求系統能較準確地預報事務的運行時間。
對磁盤數據庫而言,由於磁盤存取、內外存的數據傳遞、緩衝區管理、排隊等待及鎖的延遲等使得事務實際平均執行時間與估算的最壞情況執行時間相差很大,如果將整個數據庫或其主要的“工作”部分放入內存,使每個事務在執行過程中沒有I/O,則為系統較準確估算和安排事務的運行時間,使之具有較好的動態可預報性提供了有力的支持,同時也為實現事務的定時限制打下了基礎。這就是內存數據庫出現的主要原因。
內存數據庫所處理的數據通常是“短暫”的,即有一定的有效時間,過時則有新的數據產生,而當前的決策推導變成無效。所以,實際應用中採用內存數據庫來處理實時性強的業務邏輯處理數據。而傳統數據庫旨在處理永久、穩定的數據,其性能目標是高的系統吞吐量和低的代價,處理數據的實時性就要考慮的相對少一些。實際應用中利用傳統數據庫這一特性存放相對實時性要求不高的數據。
在實際應用中這兩種數據庫常常結合使用,而不是以內存數據庫替代傳統數據庫。
而內存數據庫也分全內存計算和熱內存計算。全內存計算,即數據需要全部裝載到內存中進行計算,對硬件要求高,譬如QlikView等產品。熱內存計算,部分數據加載到內存中即可以進行計算,硬盤和內存會有數據交換來計算未加載的數據,譬如Yonghong Z-Suite。

內存數據庫技術特點

(1)採用複雜的數據模型表示數據結構,數據冗餘小,易擴充,實現了數據共享。
(2)具有較高的數據和程序獨立性,數據庫的獨立性有物理獨立性和邏輯獨立性。
(3)內存數據庫為用户提供了方便的用户接口。
(4)內存數據庫提供4個方面的數據控制功能,分別是併發控制、恢復、完整性和安全性。數據庫中各個應用程序所使用的數據由數據庫統一規定,按照一定的數據模型組織和建立,由系統統一管理和集中控制。
(5)增加了系統的靈活性。 [1] 

內存數據庫存儲問題

要解決持久性問題,內存數據庫也有相應的解決方案。這其中包括在集羣裏保存額外的數據副本,然後對數據庫進行橫向擴展,讓系統能夠在運行中不斷將更新數據複製到一個或多個備用系統當中。
一些數據庫系統還會定期將數據複製到磁盤系統,就是為了應對上述突然斷電或系統宕機的情況。當然這時候就要在額外的負載和數據可恢復性方面做出權衡。
由於內存數據庫的風險比傳統OLTP數據庫要大,所以要對它所支撐的應用系統有一個更清楚的認識。目前從整體來看,傳統的OLTP應用系統往往會避免使用內存數據庫技術,它更多地應用在特定的數據類型或者分析應用(包括批處理報表系統)當中,這些系統的數據遠沒有OLTP系統重要。
另一方面也是出於成本預算的考慮,DRAM相比於傳統磁盤甚至閃存來説都是更昂貴的。 [2] 

內存數據庫分類

存數據庫和磁盤數據庫
MMDB與DRDB之間主要區別在於MMDB的主數據庫常駐內存,體系結構設計的優化目標是提高內存和CPU使用效率[6,24]。與DRDB相比,MMDB的優點如下:
完成同樣的功能,所需機器指令大大降低;
事務處理無需I/O,極大提高了系統性能;
不再需要緩衝區管理器,消除了磁盤和內存之間數據拷貝開銷;
在數據組織與管理中,廣泛使用指針,簡化了內存管理,降低了空間開銷 [3] 
參考資料