記憶體資料庫 (In-Memory Database) 概述

作者/陳思帆



前言 在如今網路普及的時代,線上交易量可能會突然暴增,但使用者所要求的回應時間仍希望是不受影響的的,例如股票交易、訂票服務、刷卡交易等服務項目,對於整個系統需求,簡單而言就是高流量(High Throughput)和低延遲(Low Latency)。而使用一般傳統的資料庫的效率瓶頸就在硬碟存取速度上的限制。因此我們不妨可以考慮使用記憶體資料庫(In-Memory Database)來達成目標。本文將針對記憶體資料庫的特性做概略性的介紹。 解決硬碟存取上的瓶頸 在一般傳統資料庫的存取無論是新增、修改、查詢、刪除都必須依賴系統對硬碟存取機制,而硬碟存取則一定會面臨物理上的極限成為效率上的瓶頸,也就是硬碟旋轉的速度。但如果我們採用記憶體資料庫方式的話,記憶體透過定址存取因為省去硬碟旋轉的時間,所以在消耗時間上的表現也較穩定。根據Oracle針對TimesTen(記憶體資料庫系統)與Oracle 11G(標準版資料庫)在執行上的效能測試約可以改善6 ~ 20倍左右的效率。 與快取的不同 在過去各廠家資料庫尚未發展記憶體版本時,針對硬碟存取效率上的瓶頸,採取快取的方式,把最新且最有可能需要被利用到的資料留存在記憶體上,減少存取硬碟的機會。而此時影響效率最大的因素就是快取空間的大小和快取的策略,因此有時在空間大小設定上或者策略不好的情況下,在效率表現上可能還不如記憶體資料庫來得穩定、來得好。 資料庫的ACID特性 一般標準的資料庫含有Atomicity (原子性)、Consistency (一致性)、Isolation (隔離性)、Durability (持久性) 這四種特性,但是以記憶體資料庫而言儲存資料的媒介為記憶體,也代表著如果發生斷電或系統重開時資料就會遺失,就不符合第四項的持久性的特徵了。 記憶體資料庫Durability (持久性) 問題的解決方案 一、Snapshot (資料庫快照集) 將特定時間的資料庫樣貌記錄下來到硬碟或者其他空間,因此在發生錯誤後,可以將資料庫的樣子在重建回到記憶體上,但是Snapshot這個動作其實會消耗許多資源如寫到硬碟的時間與占用的空間,因此這個機制僅能在某可以接受的周期內作一次,所以Snapshot機制僅能回復”最近”的狀況,而非”最新”的狀況。如果需要達成Durability(持久性)的目標,那麼還需要其他機制來輔助。 二、Transaction logging (交易日誌) 將資料庫各種新增、修改、刪除等交易操作都記錄下來,而在發生錯誤後可以依照交易日誌所記錄的動作”重做一次”,藉此回復資料庫原有的樣貌。 三、Non-Volatile Dual In-line Memory Module (NVDIMM) 此種方案為硬體解決方案,NVDIMM記憶體是由DRAM記憶體(揮發性)、NAND flash的快閃記憶體(非揮發性) 和Supercapacitors(超級電容)來結合而成的硬體,在一般使用狀況下時與一般DRAM無異,但是在發生斷電或系統崩潰時,藉由超級電容供電將DRAM上的資料搬移到快閃記憶體上,在系統重開機後DRAM可以從快閃記憶體上搬回資料,藉此完成資料的持久性目標。 四、Non-volatile random access memory (NVRAM) 此解決方案也是採取硬體作為解決方案,不同的是這裡純粹是採用非揮發性的記憶體,通常是使用EEPROM(電子抹除式可複寫記憶體) 或者是採用附有備用電源的RAM。但是跟上一方法雷同的是都是藉由系統斷電或崩潰後,透過硬體保存資料能力來達成持久性目標。 五、熱備援(Hot Standby)機制 不過即使透過上述四種方式在遇上天然災害等問題時,還是有可能會導致資料來不及備份就損失的情況,那麼可能就需要熱備援(Hot Standby)機制,當主要的主機發生各種錯誤時,自動由備援主機接手處理,使得資料存取的服務不會間斷。 六、雲端備份 對於資料備份與災害復原,目前僅有Microsoft的Hekaton記憶體資料庫與Azure雲端服務作整合。 採用記憶體資料庫的優點 除了就一般大家所知記憶體存取速度較硬碟存取速度來得快與穩定之外,採用記憶體資料庫還有下列優點: 一、平衡負載 熱備援(Hot Standby)機制除了最重要的備份功能外,在正常狀況下備援資料庫只做同步資料的動作,其他資源都是閒置的。因此IBM與Oracle的記憶體資料庫善加利用資源,在預設狀況下備援資料庫允許除了新增、修改、刪除以外的要求,換句話說也就是備援資料庫可以分擔外部查詢的需求。 二、加速邏輯處理 目前已知CPU在時脈上已經到達了極限,在Hekaton (Microsoft 的記憶體資料庫)為了善用每一個核心的CPU,會將SQL指令直譯成為特殊的機械碼,解此提升整體的處理效能。 三、雲端備份 目前僅有新版的Microsoft SQL 2014提供此功能強化與Microsoft Azure的整合性,讓資料處理能在一致的部署環境中,自由橫跨公眾雲以及私有雲之間,建立雲端備份或者異地備份的機制。同時還整合大資料解決方案HDInsight,將大資料處理的運算資源得以延伸到雲端,並且可用SharePoint等來做前端呈現。 四、簡化使用 在撰寫AP方面知名廠家的產品為了整合舊資料庫,幾乎所有的界面都相同,因此可以不用變動情況下就完成了轉移動作,但還是會需要一些安全或者效率的設定與調校。 總結 在現今網路發達,線上即時的交易愈趨重要,正好記憶體的單位購置的成本相較於過去也已經降低很多了,因此使用記憶體資料庫成為一種可行的選項,況且在過去使用者也常常會使用自訂的各項快取策略來加速整體的資料交易速度,可是這樣一來在維護或開發上必然變成使用者去承擔風險,透過產品化的記憶體資料庫可以將這個風險降至最低,因此以使用記憶體式的資料庫可以說是一個未來必然的選擇。 附:各大廠家記憶體資料庫產品名稱   IBM – DB2 BLU   Microsoft - SQL Server 2014 (Hekaton)   Oracle – TimesTen