跳轉到內容

主記憶體資料庫系統設計/MMDB概述

來自華夏公益教科書

第3章:主記憶體資料庫系統簡介

目錄上一頁: 資料庫管理系統簡介下一頁: 儲存引擎


3.1 概述

[編輯 | 編輯原始碼]

許多應用程式,如電信、過程控制、航空預訂、股票市場等,都需要即時訪問資料。除了維護資料一致性外,這些應用程式還需要對訪問資料庫的事務進行及時響應。主記憶體資料庫,隨著大容量廉價記憶體的普及而變得可行,可以提供比基於磁碟的資料庫系統更好的效能和一致的吞吐量。由於資料永久駐留在主記憶體中,它不會涉及任何影響吞吐量的磁碟 I/O。實際上,對於基於磁碟的系統,吞吐量的標準偏差將非常大,即時應用程式將無法針對這種不可預測的吞吐量進行基準測試。這導致了一種新型的資料庫管理系統的發展,稱為主記憶體資料庫 (MMDB) 系統。它也被稱為“記憶體資料庫 (IMDB) 管理系統”和“即時資料庫 (RTDB) 管理系統”。

由於這種型別的資料庫管理系統的基本底層假設發生了變化,因此導致了對傳統基於磁碟的管理系統的儲存、關係和 SQL 引擎的每個元件的研究和設計。

一次磁碟塊傳輸大約需要 5 毫秒,而主記憶體訪問需要 100 納秒。透過將整個資料庫保留在記憶體中,這些磁碟 I/O 被轉換為記憶體訪問,從而使吞吐量提高了數倍。這引發了一個有趣的問題:“如果在 DRDB 中所有資料都被快取在緩衝池中,那麼它們的效能會與 MMDB 一樣好嗎?”不幸的是,答案是否定的。這是因為資料結構和訪問演算法是為基於磁碟的系統設計的,當整個資料庫完全在記憶體中時無法正常工作。關於主記憶體資料庫,有一些常見的誤解。

它們支援持久事務嗎?

是的。儘管整個資料庫都在主記憶體中,但備份副本儲存在磁碟中,以在發生崩潰的情況下啟用恢復。

多個使用者可以同時訪問資料庫嗎?

是的。多個使用者和多個執行緒可以訪問資料庫,並透過閂鎖和鎖進行同步。

資料在主記憶體中的駐留對以下方面具有重要影響:

  • 資料表示
  • 資料訪問演算法 - 查詢處理
  • 恢復
  • 併發控制

本書將更詳細地討論 DRDB 和 MMDB 實現之間的差異,以及 MMDB 如何比 DRDB 快得多。

圖 4 描述了主記憶體資料庫管理系統。它幾乎包含所有存在於磁碟駐留資料庫管理系統中的元件。SQL 引擎、關係引擎和儲存引擎下的元件實現與 DRDB 元件有很大不同。

圖 4:MMDB 系統架構

在 MMDB 的情況下,對應於資料庫的物理實體是共享記憶體段或記憶體對映檔案。這些程序間通訊 (IPC) 機制允許在程序之間共享記憶體。有一些 JAVA 嵌入式主記憶體資料庫只需要多執行緒訪問。這些 DBMS 使用堆記憶體作為資料庫。對於多程序訪問,我們應該使用共享記憶體 IPC 或記憶體對映 IPC 機制。通常,控制資訊與資料記錄分開儲存,以避免控制資訊的損壞。

3.2 記憶體段

[編輯 | 編輯原始碼]

記憶體分為三個主要段。

控制段包含鎖表、程序表、事務表、撤銷日誌和重做日誌。這些結構是短暫的,是資料庫管理系統操作所必需的。

目錄段包含有關表、索引、欄位等的元資料。

使用者段包含所有表的記錄和這些表的索引記錄(如果有)。

3.3 SQL 引擎

[編輯 | 編輯原始碼]

在 MMDB 的情況下,SQL 語句的最佳化和執行發生了巨大變化。基於成本的最佳化主要基於磁碟 I/O 的數量,而不是 CPU 週期。這些基於成本的最佳化是整個 DBMS 中最複雜的系統。DRDB 使用基於成本和基於規則的最佳化器。但在 MMDB 的情況下,基於規則的最佳化器就足夠了。

3.4 關係引擎

[編輯 | 編輯原始碼]

當我們不需要使用兩遍演算法來實現操作時,所有關係操作演算法都會發生變化。此外,在 DRDB 的情況下,當我們執行第一遍時,我們會將所有欄位的資料從磁碟複製到記憶體。在 MMDB 的情況下,我們將使用指標間接定址,並避免資料複製和磁碟 I/O。

對於 MMDB,T-Tree 索引結構在空間和 CPU 週期方面優於 DRDB 的 B-Tree。

3.5 事務引擎

[編輯 | 編輯原始碼]

由於 MMDB 事務不再等待磁碟 I/O,這會導致大量爭用問題和死鎖,從而影響吞吐量。在 MMDB 中,需要避免這一點並比 DRDB 更加重視。

3.6 儲存引擎

[編輯 | 編輯原始碼]

在 DRDB 中,分配是基於磁碟塊進行的。但在 MMDB 中,它應該在記憶體中進行。這會導致分配演算法的大量最佳化,從而節省空間和 CPU 週期。資料庫模組在 DRDB 的情況下與檔案管理器模組一起工作,而在 MMDB 的情況下,它與 OS IPC 抽象層一起工作。


目錄上一頁: 資料庫管理系統簡介下一頁: 儲存引擎

華夏公益教科書