Oracle、NoSQL和NewSQL 資料庫技術對比

VoltDB_China發表於2020-11-11

關於作者
John Ryan是經驗豐富的資料倉儲架構師、開發人員和資料庫管理員。他專門從事多太位元組Oracle系統上的Kimball維度設計,在行動電話和投資銀行等多個不同的行業積累了超過30年的IT經驗。
本文首次發表是作為有關資料庫和大資料的系列文章中的一篇。


01 世界已經變了

在過去的20年,世界發生了翻天覆地的變化。在2000年的時候,上網的人不過寥寥數百萬,還是用桌上型電腦連56k的貓來上網,那時候亞馬遜還只賣書。今天,數十億人用智慧電話或平板電腦每週7天、每天24小時上 網,幾乎什麼都在網上買,另外還使用 Facebook、Twitter和Instagram 這些社交應用與人互動。勢不可擋。
人們的心理預期也變了。如果網頁幾秒鐘未法完成重新整理,我們當即失去耐心,換個別的網站。如果某個網站無法訪問,我們擔心那就是我們所知文明的終結。如果某個大型網站無法訪問,它會成為全球性的大新聞。
即刻滿足都還不夠!
(Instant gratification takes too long!)
— Ladawn Clare-Panton

注:如果您不是經驗豐富的資料庫架構師,則您可能需要先閱讀我以前關於可擴充套件性和資料庫架構的文章。


02 哪些變了?

由上可得出下列幾個結論:

  • 可擴充套件性 — 流量可能出現爆炸性的增長,IT系統需要迅速擴大規模, 以處理指數化增長的事務
  • 高可用性 — IT系統必須每週7天、每天24小時執行,並且必須具有故障容錯性。(美國銀行2011年發生一次故障,對2900萬客戶造成持續六天的影響)。
  • 高效能 —隨著可擴充套件性的不斷增強,效能也必須跟上,保持穩定和快速。據亞馬遜估算,在極端情況下,頁面載入時間每增加一秒,該公司每年要損失16億美元。
  • 速度 — 裝置自帶的聯網感測器越來越多(遠的不說,智慧電話就自帶聯網感測器),每秒可能會有數以百萬計的事務需要處理。
  • 實時分析 —夜間進行批處理和業務智慧化已經過時。分析與操作處理之間的界限變得模糊,對實時決策的需求越來越多。

物聯網(Internet of Things)讓速度急劇加快!
— Stonebraker博士(MIT) .

上述需求催生極為精彩的營銷術語Translytical資料庫,意思是採用混合解決方案,即同一個解決方案既可處理海量事務,也可完成實時分析。


03 問題是什麼?

在降低成本的同時提供高效能(可能還要使用廉價伺服器),是所有資料庫廠商都面對的挑戰。但是,需求之間相互衝突:

  • 效能—最大限度地縮短延遲,在毫秒級時間內完成事務處理。
  • 可用性—即使系統的一個或多個節點發生故障或與網路斷開,也能保持執行的能力。
  • 可擴充套件性—能夠不斷地擴大規模,以滿足海量資料和事務速度的要求。
  • 一致性—提供一致、準確的結果 — 特別是在發生網路故障時。
  • 耐久性—確保修改一旦實施後不會丟失。
  • 靈活性—提供通用的資料庫解決方案,以支撐事務及分析方面的工作負荷。

要具備海量漸進擴充套件能力,唯一現實的辦法就是部署橫向擴充套件的分散式系統。通常情況下,為最大地限度提高可用性,對某個節點實施的修改會被立即複製至兩個或更多個其他節點。但是,一旦將資料分配給多個服務 器,則面臨利弊權衡。
例如:

3.1
效能與可用性和耐久性

許多NoSQL資料庫將資料複製至叢集內的其他節點,以提高可用性。如果 資料庫節點在在寫入操作後立即崩潰,則資料在其他機器上有備份,因此修改是持久的。但是,也可放鬆這個要求,不備份就立即返回。這可實現效能的最大化,但有丟失修改的風險。修改可能根本無法持久。
在這裡插入圖片描述
▲ 地理分散式系統

3.2
一致性與可用性

NoSQL資料庫支援最終一致性。例如,在上圖中,如果與紐約之間的網路 連線臨時斷掉,則有兩個選擇:

  • 停止處理 — 但是紐約的可用性就受到了影響
  • 接受讀取/寫入操作 —在恢復網路連線後消除差異。但是這麼做的風險是提供過期或錯誤的結果,可能需要解決寫

顯然,NoSQL資料庫是用一致性來換取可用性方面的能力。

3.3
靈活性與可擴充套件性

與Oracle和DB2等通用型關聯式資料庫相比,NoSQL資料庫的靈活性相對較 差,(例如)不支援Join(連線)操作。除了許多不支援SQL語言的資料庫,有些資料庫(例如Neo4J和MongoDB)是專為支援特定問題而設計的—圖處理和JSON資料結構。
即使像HBase、Cassandra和Redis這樣的資料庫,也放棄關係連線操作, 但許多還限制訪問單一主鍵,並且不支援輔助索引。
許多資料庫都聲稱100%支援ACID事務,
實際上提供正式ACID保證者寥寥無幾。
— Peter Bailis 博士(史丹佛大學)


04 ACID與最終一致性

資料庫解決方案的擴充套件方面,主要挑戰之一就是維持ACID一致性。亞馬遜採用DynamoDB資料庫,放鬆一致性約束,以換取速度,從而解決了效能問題,由此催生了大量NoSQL資料庫。
另外,最成功的資料庫(包括Oracle)也無法提供真正的ACID隔離性。本文研究了18個資料庫,預設支援SerializabilITy(可序列性)的資料庫只有三個(VoltDB、Ingres和Berkeley DB)。主要原因是難以在保持效能的同時支援可序列性。
最終一致性是特別弱的一種模式。

系統可返回任何資料,依然可以做到最終一致。
— Peter Bailis 博士(史丹佛)

另一方面,最終一致性幾乎不提供一致性保證。下圖說明了最終一致性所存在的問題。一個使用者從銀行賬戶上扣款100萬美元,但是在賬戶修改得到複製之前,又有一個別的使用者檢查這個賬戶的餘額。唯一的保證是,只要沒有進一步的寫入操作,系統最終會提供一致的結果。這又有什麼用處呢?讓人接受就更談不上了。
在這裡插入圖片描述

▲ Cassandra — 最終一致性


05 重新設想OLTP資料庫

十年前,Michael Stonebraker博士撰寫了《架構時代的終結》(The End of an ArchITectural Era)這篇文章,認為Oracle、微軟和IBM提出的1970年代的資料庫架構已經過時。
他提出OLTP資料庫應具備下列特點:

  • 專門用於解決某一個問題 — 快速執行短暫的預定義(非即席的)事務,查詢計劃相對簡單。簡而言之,就是專用的OLTP平臺。
  • 符合ACID規範 — 所有事務均為單執行緒執行,預設提供全部可序列性。 總是可用 — 利用資料複製(而非熱備)來提供高可用性,幾乎不增加成本。
  • 地理分散 —在由分散多處的機器組成的網格上無縫執行(進一步提高韌性,並區域性地提高效能)
  • 無共享架構 —多臺機器通過對等網格聯網,分擔負荷。新增機器是不會造成停機的無縫操作,並且失去一個節點僅會造成效能略微下降,而不是全系統停止執行。
  • 基於記憶體 — 全部在記憶體中執行,以提高絕對速度,通過向其他節點進行記憶體中資料複製來保證耐久度。
  • 消除瓶頸 —徹底重新設計資料庫的內部構件,實現單執行緒執行,同時消除重做(Redo)日誌以及鎖定和鎖存的必要性—這些都是資料庫效能最為重大的制約。

為證明上述各項的可能性,他建了一個原型,即H-Store資料庫,並證明使用相同的硬體, TPC-C基準效能是某商業競爭對手的82倍。H-Store原型成績優異,實現了每秒處理70,000個事務,而儘管資料庫管理員付出了大量努力進行調優,某商業競爭對手每秒僅850個。


06 世上無難事!

Stonebraker博士的成就令人側目。此前的TCP-C世界紀錄為每個 CPU 核心大約1,000個事務,但H-Store採用雙核2.8GHz桌上型電腦,速度是原世界紀錄的35倍。他在2008年的文章《細探 OLTP 》(OLTP through the Looking Glass)中解釋了為什麼商業資料庫(包括Oracle)的效能為什麼如此差勁。
在這裡插入圖片描述

▲ 關聯式資料庫的處理資源消耗

上圖顯示,有93%的系統開銷是用於傳統(歷史遺留)的資料庫系統,包括鎖定、鎖存和快取管理。合計只有7%的機器資源是專門用於手頭的任務。
H-Store只是通過消除上述瓶頸,使用基於記憶體的處理來代替基於磁碟的處理,就得以實現看似不可能的任務,即全面的ACID事務一致性,使速度提升了幾個數量級。


07 NewSQL資料庫技術

在這裡插入圖片描述

VoltDB最早釋出於2010年,是H-Store原型的商業化產品,屬於專用的OLTP平臺,用於Web級的事務處理和實時分析。如這張資訊圖所示,目前有250種商業化資料庫解決方案,其中只有13種被歸入NewSQL技術的行列。


08 VoltDB

與其他NewSQL資料庫一樣,VoltDB旨在完全在記憶體中執行,提供定期拍攝磁碟快照的選擇。它可在本地執行於64位Linux,也可使用AWS、谷歌和Azure的雲服務來執行,採用橫向可擴充套件的架構。
傳統的關聯式資料庫將資料寫入基於磁碟的日誌檔案。VoltDB則不然,是同時對記憶體內的多臺機器進行修改。例如,即使兩臺機器發生故障,
K-Safety係數為2時即可保證不會造成資料損失,因為資料至少存入三個記憶體節點。
事務作為Java儲存過程(stored procedure)提交,可在資料庫中非同步執行,並且資料自動分割槽(分片),分配至系統內的節點,儘管可複製基準資料以最大限度地提高連線效能。VoltDB有一點不同尋常,就是還以JSON資料結構的形式,支援半結構化資料。
就效能而言,2015年進行的一次基準測試顯示,VoltDB的處理速度至少是NoSQL資料庫Cassandra的兩倍,但成本只有AWS雲處理成本的六分之 一。
最後,VoltDB 6 .4版通過了極為苛刻的 Jepsen分散式安全性測試。
相比之下,此前對NoSQL資料庫Riak進行的測試表明,即使採用最強的一 致性設定,寫入也會下降30-70%。與此同時,採用輕量級事務時,Cas- sandra 最多損失5%的寫入。


09 MemSQL

與VoltDB相同的是,MemSQL是橫向擴充套件的記憶體型分散式資料庫,專為快速獲取資料和實時分析而設計。另外,既可在本地執行,也可在雲上執行,並可在不同節點之間自動分片,在每個CPU核心上並行執行查詢。
在這裡插入圖片描述

▲ 關聯式資料庫的處理資源消耗
儘管與VoltDB有許多相似點,但上圖表明瞭一個重要的差異。MemSQL 試圖在實時事務與資料倉儲式歷史資料處理這兩種相互衝突的需求之間尋求平衡。為此,MemSQL以行儲存(row store)的方式在記憶體中儲存資料, 並用面向列的磁碟儲存作為備份,從而將實時(最近)資料與歷史結果結合在一起。
這使其在OLTP和資料倉儲(Data Warehouse)領域獲得了穩固的位置,儘管這兩種解決方案都是瞄準實時資料獲取和分析市場。


10 哪些應用需要NewSQL技術?

要求採集速度和響應速度非常快(平均1-2毫秒),同時要求ACID保證所提供的事務準確性的任何應用—例如客戶計費。
典型的應用包括:

  • 實時授權 — 例如,為了分析和計費而驗證、記錄和授權行動電話呼叫。通常,99 .999%的資料庫操作都必須在50毫秒內完成。
  • 實時欺詐偵測— 用於完成複雜的分析查詢,以在交易授權之前,準確地確定欺詐的可能性。
  • 遊戲分析 —用於根據玩家的能力和玩家的典型行為,實時動態修改遊戲難度。目標是留住現有玩家,以及將免費客戶轉化為付費玩家。在速度、可用性和準確性要求很高的情況下,某客戶通過運用這些手段,將玩家的遊戲支出提高了40%。
  • 個性化Web廣告 — 實時動態地選擇基於 Web 的個性化廣告,記錄廣告呈現事件以用於計費,同時記錄廣告結果以用於後續分析。

與絕大多數OLTP應用相比,這些起初看來都不起眼,但是在每週7天、每天24小時聯網的世界,這些為實時分析提供了新的疆域,並且隨著物聯網的興起,也帶來了巨大的機會。


11 結論

雖然Hadoop與大資料的關聯更為密切,並且近來獲得巨大的關注,但資料庫技術是任何IT系統的基石。
類似地,NoSQL資料庫為替代關聯式資料庫提供了一個快速、可擴充套件的選 擇,但是儘管有免許可開源資料庫的誘惑,事實上還是一分錢一分貨。另外,正如VoltDB所顯示的那樣,實際上長期來看,可能比NoSQL類的選擇更為便宜。
總的說來,如果有Web規模、OLTP和(或)實時分析的要求,則需要認真考慮NewSQL類資料庫。

如果您對VoltDB的工業物聯網大資料低延遲方案、全生命週期的實時資料平臺管理等感興趣,歡迎私信,進入到我們的官方交流群。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69903219/viewspace-2733467/,如需轉載,請註明出處,否則將追究法律責任。

相關文章