(一)資料庫處理速度之痛
最近發現資料庫系統的書上很多内容還是基于以輔助存儲器作為主要讀寫陣地,以記憶體作為緩存來輔助資料庫的讀寫。我們在學習計算機組成原理的時候知道:記憶體和輔助存儲器的讀寫速度是不比對的,記憶體遠遠快于輔助存儲器的讀寫速度。在主要基于輔助存儲器的資料庫系統中,我們通過各種算法優化不斷的提高資料庫處理資料的能力,然而無論速度如何提高,資料庫的處理速度始終無法逾越記憶體與輔助存儲器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的資料比對技術。
- 靳若冰,基于商業資料庫的實時資料庫開發研究。
- 石英偉,分布式實時記憶體資料庫關鍵技術研究與實作。
- 梁智興,記憶體資料庫恢複技術研究。
- 張效尉,王大羽,記憶體資料庫故障恢複政策研究。