記憶體資料庫

記憶體資料庫

記憶體資料庫,顧名思義就是將數據放在記憶體中直接操作的資料庫。相對於磁碟,記憶體的數據讀寫速度要高出幾個數量級,將數據保存在記憶體中相比從磁碟上訪問能夠極大地提高套用的性能。

基本介紹

  • 中文名:記憶體資料庫
  • 外文名: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)增加了系統的靈活性。

存儲問題

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

分類

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

相關詞條

熱門詞條

聯絡我們