雲計算

內存數據庫技術簡述

(一)數據庫處理速度之痛
最近發現數據庫系統的書上很多內容還是基於以輔助存儲器作為主要讀寫陣地,以內存作為緩存來輔助數據庫的讀寫。我們在學習計算機組成原理的時候知道:內存和輔助存儲器的讀寫速度是不匹配的,內存遠遠快於輔助存儲器的讀寫速度。在主要基於輔助存儲器的數據庫系統中,我們通過各種算法優化不斷的提高數據庫處理數據的能力,然而無論速度如何提高,數據庫的處理速度始終無法逾越內存與輔助存儲器I/O操作速度的瓶頸。雖然經過若干年的發展,輔助存儲器從磁帶到機械硬盤到固態硬盤在容量、性價比、讀寫速度等方面都有不小的提升,但與內存在速度上還是難以匹配。幸運的是,計算機硬件的發展中內存的發展是遵循“摩爾定律”的。內存如今越來越大、價格也越來越便宜,使得我們應該重新審視基於輔助存儲器的數據庫。
(二)數據庫發展階段
如果將數據庫發展按照內存和外存(輔助存儲器)來進行劃分,目前可以將數據庫的發展分為如下三個主要階段。
一、外部存儲器磁盤為主的階段:數據庫的大部分內容都只是放在輔助存儲器上,內存一般作為緩存來加快數據讀寫速度。我們的數據庫實現書籍大多都是敘述這一階段的數據庫。但在這一階段中外部存儲機械式磁盤讀寫速度與內存懸殊很大,磁盤的I/O操作對數據庫性能的影響很大。
二、外部存儲器固態硬盤(SSD)為主的階段:隨著技術的發展,固態硬盤在市場中的份額越來越多,並且它的容量性價比是符合摩爾定律的,帶寬提升也非常快(如PCIE接口)。所以開始有一部分公司嚐鮮,把數據庫中部分或全部轉移到固態硬盤上。這也確實提高了外部存儲器的I/O操作的速度。但仍然未根本解決內存與外存之間速度的矛盾。
三、內存為主的階段:這一階段中因為內存價格持續下降、速度持續增加,數據庫的主陣地變為內存,而輔助存儲器只是起到輔助作用了。這一階段有VoltDB、HANA、MemSQL等一系列內存數據庫。它們都有一個相同的特點,就是將內存作為數據庫的主陣地,並針對內存與CPU之間的存取進行算法設計、優化。除了共同點外,每個數據庫又有自己所專注的方面,VoltDB就對原有數據庫設計理論進行了顛覆,為了避免鎖等開銷,提升數據庫性能,應用全局時鐘和預編譯進行併發控制;HANA則是通過內存存儲以及內存中數據更高程度的壓縮來換取對大數據分析任務的速度;為了使數據庫更加貼合內存,MemSQL在Mysql的基礎上對存儲引擎重新進行了設計。從上面的三個方面來看,與傳統數據庫相比,內存數據庫不失為一個提高數據庫整體性能的、值得探索的新途徑!
(三)內存數據庫發展階段
追本溯源,內存數據庫的想法萌芽可追溯到上世紀六十年代。IBM公司在1969年研製的數據庫管理系統IMS就是世界上最早的基於層次模型的數據庫管理系統,IBM公司將IMS作為軟件商品投放市場。IBM設計IMS時考慮到基於內存的數據管理方法,相應推出了IMS/VS Fast Path。Fast Path是一個支持內存駐留數據同時也可以很好地支持磁盤駐留數據的商業化數據庫。Fast Path將需要頻繁訪問、高響應速度的數據直接存放在主存中進行讀取管理,主存數據庫的主要設計思想在該產品上已經開始得到體現。後來,D J DeWitt等人於1984年在《主存數據庫系統的實現技術》中首次明確了主存數據庫(Main Memory Database)的概念。他們已經能夠預見,當時相當昂貴的主存價格會在將來不斷下降,預測未來人們可能有能力將數據庫全部放到主存中進行管理,並針對主存數據庫的構想提出了哈希算法、AVL樹、主存數據庫恢復機制等關鍵理論,為如今主存數據庫的發展起到了很大的推動作用。IBM在1985年推出了於IBM 370系統之上運行的主存數據庫OBE。隨後,檢查點技術在1986年的RB Hagman應用,以實現主存數據庫的恢復。解決主存數據庫中併發控制問題的新方法——按區雙向鎖定模式,在威斯康星大學也被首次提出,並在MM-DBMS主存數據庫上得以實現。以堆文件(HEAP FILE)的數據存儲結構作為主存數據庫存儲結構的構想在1987年的ACM SIGMOD會議中被提出。1988年,TPK主存數據庫在普林斯頓大學設計成功。1990年,System M主存數據庫在普林斯頓大學設計完成。各種主存數據庫模型像雨後春筍般不斷產生,也為今天的主存數據庫理論打下堅實的基礎。
隨著互聯網的發展,越來越多的網絡應用系統對數據庫系統在併發訪問量和響應速度上提出了前所未有的高要求。好在半導體技術也發展迅猛,半導體內存的生產規模不斷提升,動態隨機存取存儲器(DRAM)的容量越來越大,而價格越來越低。主存硬件的發展直接推動著主存數據庫市場的發展,主存數據庫技術的可行性也開始逐漸成熟。Polyhedra便是美國的OSE公司在1994年推出的第一個商業化的、投放市場並實際應用的主存數據庫產品。德國SoftwareAG於1998年推出了自己的主存數據庫Tamino Database。日本UBIT會社1999年開發出XDB主存數據庫產品。韓國Altibase推出Altibase。奧地利的QuiLogic公司2000年推出了SQL-IMDB主存數據庫。美國的McObject於2001年推出eXtremeDB。加拿大Empress公司推出EmpressDB。SAP公司於2011年推出基於內存計算技術的SAP HANA(High-Performance Analytic Appliance),面向企業分析性應用的產品。在2013年OpenWorld上甲骨文推出BI Machine Exalytics也是使用的內存數據庫技術。
(四)內存數據庫認知
雖然在現代傳統數據庫技術也通過加大了內存容量,以此使緩衝區增大,最終將頻繁訪問的數據緩存到緩衝區以達到加快存取速度的目的。但這種方法與磁盤數據庫無任何區別,只是緩衝區很大而己。數據的存取要通過緩衝區,最小化磁盤I/O仍然是算法設計的主要目標。內存數據庫不僅僅只是比傳統數據庫加大了內存,而且因為數據庫全部放到了主存,完全沒有磁盤的I/O操作的系統瓶頸。既然內存數據庫的主要陣地轉移到了主存,所以傳統數據庫中主要針對磁盤I/O操作的大多數算法不再適用於內存數據庫。為了更好的、高效的使用CPU和內存空間,內存數據庫的數據結構、查詢處理、併發控制、恢復等都必須重新設計。目前,己有大量的對內存數據庫的研發,包括了內存數據庫的併發控制技術、事務提交處理技術、數據訪問技術、查詢處理和查詢優化技術、恢復處理技術、數據遷移技術、負載均衡技術等各個方面。雖然目前的理論比較豐富,但是穩定的、適用性廣的產品並不多,大多數還處於實驗室研究階段,工業化應用也只侷限於幾個領域,比如電信和金融領域,並且多為平臺相關的、應用相關的數據庫系統,無法適應廣泛的應用要求。
內存數據庫系統的數據永久駐留在內存中,而常規的磁盤數據庫系統的數據是駐留在磁盤中。因而,在訪問數據時,內存數據庫擁有比磁盤數據庫更高的訪問效率。對於需要在嚴格要求的時間段內完成事務請求的實時應用系統,和需要支持大數據量併發訪問的高性能事務處理平臺來講,內存數據庫都是一個理想的選擇。
從內存數據庫的發展歷史來看,內存數據庫產生已有三十餘年。雖然早期人們對內存數據庫的定義並沒有形成完全的標準統一,但人們對內存數據庫已經達到的共識是:內存數據庫不應涉及內存大小、次數、數據何時進入及怎樣留駐內存等具體的實現技術,而只包含數據庫永久留駐內存,事務的數據存取只涉及內存。後來人們慢慢對內存數據庫形成普遍的理解,數據庫運行期間所需的數據環境不應有I/O,常駐內存是內存數據庫充分必要的條件。

本文在撰寫過程中,得到貴州大學李暉教授的指導,在此感謝!

參考文獻:

  • 王晨,內存數據庫若干關鍵技術研究。
  • 袁培森,內存數據庫的設計與實現。
  • 宋毅,緩存敏感T樹的設計與實現。
  • 史習一,在數據清洗過程中基於MMDB的數據匹配技術。
  • 靳若冰,基於商業數據庫的實時數據庫開發研究。
  • 石英偉,分佈式實時內存數據庫關鍵技術研究與實現。
  • 樑智興,內存數據庫恢復技術研究。
  • 張效尉,王大羽,內存數據庫故障恢復策略研究。

Leave a Reply

Your email address will not be published. Required fields are marked *