iThome

企業對於記憶體資料庫的常見疑慮在於:資料儲存在記憶體中安全嗎?斷電時怎麼辦?事實上,你還有一份足供備援的Transaction Log檔儲存於硬碟,所以並不需要擔心資料會消失。

其他問題如:備份機制為何?使用的語法還是SQL嗎?改寫系統的主要負擔何在?還有,使用上划算嗎?關於這些問題,這裡都有完整的回答。

Q1:一旦斷電,資料就不見了?

這是目前大部分企業面對記憶體資料庫的最大疑慮,尤其記憶體的可信賴度遠低於硬碟。

然而記憶體資料庫除了儲存資料於記憶體,也有記錄檔存放於硬體,所以可以避免資料漏失的情況發生。

若是採用快取模式,記憶體資料庫的角色則類似「快取(Cache)」,所以相同的內容會同步到後端的傳統資料庫(Disk- based Database)。而即使在單機模式下也不用擔心,因為記憶體資料庫的交易日誌檔(Transaction Log)和快照檔(Checkpoint File)仍是儲存於硬碟,所以可以透過這些檔案復原。

Checkpoint File主要的作用是依管理者的設定,每隔一段時間對資料庫做一次快照(Snapshot),儲存資料庫當時的樣子,管理者可以利用快照集還原資料庫在某一個時間點的內容。

而記憶體資料庫在發生電腦當機或斷電的情況,在重新啟動時便透過Checkpoint File還原資料庫至最近一次快照的狀態,而從快照那個時間點到當機前的異動,則搭配Transaction Log填補,如此便可還原至斷電前的狀態。

以上是補救資料的方法,不過,相較於此,企業更在意的是線上作業停擺。

關於這方面,IBM和Oracle都推出Hot Standby的機制來因應。在正常的狀態下,主要(Active)資料庫透過Transaction Log將交易同步至備援(Standby)資料庫。除此之外,備援資料庫還可分擔應用程式的查詢要求(Request),達到負載平衡的效果。

而當系統偵測到主要資料庫的運作發生異常,即自動切換到備援資料庫,接續線上的交易作業,管理者不需要手動設定或重新啟動電腦。

Q2:在快取模式下,如果記憶體資料庫和後端的傳統資料庫斷線,系統如何處理?

若在記憶體資料庫的後端串連傳統資料庫,前後端雙方的資料同步,主要還是根據Transaction Log的內容。所以,即使發生斷線的狀況,主機恢復連線時,仍可透過Transaction Log補齊斷線階段異動資料。

這部分由於TimesTen的Transaction Log已調整成與Oracle資料庫相同的格式,所以兩者的資料同步沒有困難,管理者甚至可以設定逐筆更新或者定時批次處理。

而IBM則採取開放策略,SolidDB的後端可串連多種廠牌的資料庫,而資料的同步由CDC(Change Data Capture)機制處理,它自動轉換Transaction Log的內容,以符合各廠牌資料庫的格式,達到同步的目的。

Q3:與其建置記憶體資料庫,何不擴充記憶體就好?

單純把記憶體放大的作法,與記憶體資料庫相較,存取效率還是會有數倍的差距。

傳統應用記憶體快取的作法,是把讀取機率比較高的資料,快取在記憶體,如此一來,可以增加查詢的Hit Rate(擊中率),減少磁碟存取(Disk I/O)的機會。事實上,依據資料庫的設計原理,在一般情況下,使用者查詢一筆資料,資料庫通常會連帶把該筆資料前後的資料,也一併快取在記憶體,方便後續的查詢使用。

然而使用者下一次的查詢,若未在快取的範圍之內,仍必須回硬碟查詢。再加上,使用者若有「寫入」的動作,勢必得將異動更新到實體資料庫,所以尤其是針對寫入動作頻繁的資料庫應用,增加記憶體以提升存取效能的作法,效果有限。

再者,記憶體資料庫的引擎,與傳統資料庫的設計有所不同,甲骨文大中華區臺灣技術諮詢部資深諮詢經理黃久安表示:「傳統資料庫找資料的方式,需要比較多的判斷。」而記憶體資料庫已針對記憶體的特性,做了最佳化的處理,所以效能優於資料庫搭配更大記憶體快取容量的作法。

Q4:它的查詢語法與傳統資料庫有差別嗎?

就IBM和Oracle提出的記憶體資料庫方案而論,他們本身都是典型的關聯式資料庫,差別僅在於存取與執行的載體,是記憶體而非硬碟。

所以,也同樣採用SQL語法,對於熟悉關聯式資料庫應用的IT人,沒有太大的學習門檻。

不過,記憶體資料庫仍無法避免傳統資料庫存在的各家SQL語法有小差異的情況。這方面IBM SolidDB遵循ANSI SQL-92標準,而Oracle TmesTen則採用Oracle PL/SQL。

Q5:既有系統若改採記憶體資料庫,主要的負擔何在?

無論採取快取或單機模式的記憶體資料庫,架構調整與程式的修改是主要的工作,哪些資料表需要藉助記憶體資料庫強化存取的效能,必須定義出來的。

架構面的調整方式與成本有關,如果資料量很大的話,整個資料庫改成記憶體資料庫的成本很高。

就資料庫的成本來看,根據廠商提供的建議售價,Oracle Standard版是5,800美元/處理器、Enterprise版的售價是47,500美元/處理器,TimesTen的售價是14,500美元/處理器。而IBM SolidDB的售價大致上是35,300美元/100 Processor Value Unit(PVU),而PVU的算法又與伺服器及處理器的等級有關。

大致上看來,記憶體資料庫的售價有可能高於傳統資料庫。再加上,伺服器的記憶體價格高於個人電腦。所以資料量、記憶體、資料庫授權如何搭配的性價比最高,企業需要進一步精算。

確立架構之後,畫出程式改寫的範圍。當架構改變,資料庫連結必須隨之調整。而就IT人員而言,程式的改寫是最主要的負擔。

臺灣澳圖美德資訊長杜奕鋒分析:「傳統寫SQL語法,為了避免Disk I/O,會盡量減少磁碟存取的次數。而在記憶體資料庫中,因為磁碟導致的瓶頸因素消失,SQL的寫法或多或少會有不同。」

尤其各家資料庫的SQL語法有小差異,所以程式及SQL的改寫是免不了的。這方面原先即採用Oracle的企業,導入TimesTen的負擔會小一點,因為兩者都採用PL/SQL,不用調整SQL語法。而選擇SolidDB則有不被特定資料庫平臺綑綁的好處。

 

 記憶體資料庫的Hot Standby原理 

目前IBM和Oracle的記憶體資料庫備援方案皆為「Hot Standby」機制,備援(Standby)的資料庫可分擔使用者的查詢需求,而當主要(Active)的主機發生異常,則自動由備援接手。

 

【相關報導請參考「記憶體資料庫存取效能提升6-20倍的祕密」


Advertisement

更多 iThome相關內容