

【摘 要】高效的動態內存管理目標包括以下兩點:快速查找和分配空閑內存以保證實時性的能力;需要減少內存碎片,充分利用有限的物理內存資源。內存分配意味著確定內存管理的效率,也就是有限內存鍵的高效使用。基于此,本文對RTDBS內存管理進行了介紹,對提高內存利用率的發展具有相應的參考價值,所介紹的方法充分體現了實時性。
1 引言
實時數據庫是數據庫系統發展的一個分支,將數據庫技術與實時處理技術相結合用于生產。實時數據庫系統是開發實時控制系統、數據采集系統、CIMS系統的支撐軟件。在流程工業中,廣泛使用實時數據庫系統、控制系統監控、系統控制和優化高級控制,并為企業的生產管理和調度、數據分析、決策支持、遠程在線瀏覽和各種數據服務提供實時數據管理能力。實時數據庫已經成為企業信息技術數據平臺的基礎。
實時數據庫系統結合了數據庫和實時系統兩者的特點,既支持大量數據的共享,維護數據的一致性、完整性,又支持數據和事務時間的約束,實時數據庫在開發過程中得到了廣泛的應用和認可。從實時數據庫中的集散控制系統直接應用于實時控制工程,到實時數據庫中的CIMS信息集成,反映了實時數據庫系統的發展趨勢和方向。
實時數據庫系統在現代應用中,被廣泛應用于各個領域,包括石油化工、煉油、化工、冶金、制藥、采礦、電力工業以及軍事導航、電信等實時應用,應用在不同的環境中,它們功能需求也不同。實時數據庫系統是傳統關系數據庫理論中理論研究的基本方向,增加了時間限制要求,這使得數據庫設計變得更加復雜,復雜的算法增加了系統資源的成本。這些反過來影響系統的實時性;他們需要簡化實時數據庫技術。
2 實時數據庫的數據組織
數據庫管理系統作為一種獲取高性能數據庫的方式存儲在內存中而不是存儲在磁盤上,因此我們必須設計一種新的數據結構和算法來更有效地利用CPU周期和內存空間。實時數據庫設計是打破傳統的磁盤數據庫設計理念,考慮到快速直接訪問內存的特點,以CPU和內存空間的高效利用為目標,重新設計和開發各種策略和算法、技術、方法和機制。
實時內存存儲結構主要是指數據在數據庫層面的物理組織,根據數據的完成情況、訪問方式和不同的存儲位置,一個完整的實時內存數據庫包含四個部分:易失性內存、非易失性內存、磁盤存儲和磁帶存儲。如圖1所示。
易失性存儲器Ml是活動的或等待數據的狀態,它是整個數據庫的“工作版本”。數據將被邏輯地分成許多關系存儲,每個關系,或者一個連續的存儲區域來存儲一個鏈接。主內存空間利用率是內存數據庫可重用程度的衡量標準,是整體設計中的一個重要因素,需要內存消耗和數據操作中的空間來平衡便攜式。
非易失性內存M2主要是解決實時性和空間消耗兩者之間的矛盾。雖然實時數據庫的“工作版本”在主存中,但并不要求所有數據都進入主存。M2是Ml層功能的補充。一方面,這些M2數據在系統短暫斷電后仍有利于系統恢復;另一方面,與存儲在磁盤上的相比,更容易保證實時性能,并且不占用主內存的寶貴時間。
磁盤存儲以M3為主存,磁盤存儲數據備份,而實時內存數據庫不需要運行時加載所有數據。作為磁盤數據類型數據庫操作的主要目的,這一層可以考慮在磁盤數據庫中使用現有的數據進行操作和維護。
磁帶存儲M4是一個完整的備份使用磁盤存儲是用來記錄系統運行的所有圖像,為搜索和分析歷史數據提供充分的有利條件。
3 實時數據庫內存管理
雖然數據庫運行時操作系統會提供內存管理功能,但在應用程序中,系統提供的內存管理不一定適用于頻繁釋放內存的實時內存數據庫場合。如果數據庫系統本身有高效的動態內存管理程序,數據庫系統還可以減少對特定操作系統的依賴,擴大數據庫的范圍。高效的動態內存管理目標包括以下兩點:
(1)能快速找到并分配空閑內存,保證實時性;
(2)需要減少內存碎片,充分利用有限的物理內存資源。
要通過合并相鄰區域來減少內存碎片,請壓縮內存以實現。當內存空閑時,檢查前后的空閑內存區域是否存在,如果存在,可以合并成一個更大的空閑內存區域,以滿足下一個應用程序準備所需的大內存空間。壓縮是指將內存復制操作所使用的內存區間轉換到鄰近狀態的區域,這樣在內存的小區域內這些區間就可以組合成一個更大的內存區域。
實際使用中,內存的壓縮限制更多,如果數據庫系統是基于虛擬內存地址的,內存壓縮操作是不允許的,因為物理內存和邏輯內存之間存在映射關系,簡單的內存復制可能會破壞這種映射關系。另外,內存復制操作的成本取決于內存塊的復制長度,如果長度太長,復制操作是不合適的。內存分配是指確定內存管理的效率,即有限內存鍵的有效使用。常見的內存管理方法有:位圖分配法;堆數組分配方法;內存池分配方法。
內存中的堆是一個連續的區域,具體到最小分配單元的分配。作為功率需求的基本單位的以字節為單位的最小分配單位是2次方。內存分配單元的每個當前狀態都有一個布爾值記錄,1表示已經分配,0表示沒有分配。使用長度字節數組來表示內存空間使用情況。使用bitmap分配方法,雖然使用內存的當前狀態來維護位圖字節數組,但是很快發現沒有足夠的空閑內存來支持這個目標。原因是它不管理每個訂單的空閑內存大小,從零開始掃描位圖字節數組需要找到合格的空閑內存。
堆數組分配方法:考慮使用堆數據結構來維護空閑塊數組的大小,堆數據結構是一個二叉樹,根節點的空閑塊大小大于任何子節點的空閑塊大小,即堆頂部空閑塊的最大值。靜態數組可以用來實現堆結構,數組元素下標用來表示父子節點之間的二元關系。
當遇到以下步驟的內存請求時:
(1)如果應用程序內存大小大于堆頂部的大小,則直接返回失敗,否則轉(2);
(2)如果應用程序內存大小等于堆頂部的大小,則刪除頂部節點,否則轉(3);
(3)如果應用程序內存大小小于堆頂部的大小,則在頂部計算自由內存大小和應用程序之間的差異大小,以生成新的節點;
(4)重新安排堆結構,改變數組的靜態分配;
此外,內存池分配方法改進的關鍵是要求正確的池記錄使用了各種列表統計。統計數據將描述在不同頻率下使用的內存塊的大小、成功應用程序的數量、應用程序失敗和其他消息,基于這些統計數據,它可以調整管理的內存池列表。如果經常遇到應用程序內存大小大于所有列表的最大塊大小的情況,可以增加內存池塊大小,并減少這些列表的相對較少的數量。如果應用程序集中在相對較小的內存列表中,另一大塊內存可以減小列表的大小,并增加相對較小的列表數量。
4 結論
本文從實時內存數據庫的存儲結構入手,介紹了實時內存數據庫的內存管理方法及其優缺點分析,介紹了堆數組分配方法、內存池分配方法,以達到減少內存碎片充分利用內存的目的。
參考文獻:
[1]Zhubiao Xue,Research and Implement ofKey Technology in Real-Time Main Memory Database,Master's thesis of Southeast University
[2]辛超. 基于內存數據庫的建筑垃圾三維數據管理[D].北京建筑大學,2020.
[3]王文娟,王潤中.Oracle智能化內存管理特性與配置方法[J].現代計算機,2020(12):123-126.
作者簡介:
雷雁茹,2001出生,漢族,研究方向:大數據開發。
(作者單位:西南科技大學城市學院)