Oracle、NoSQL和NewSQL 數據庫技術對比

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"關於作者"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"John Ryan是經驗豐富的數據倉庫架構師、開發人員和數據庫管理員。他專門從事多太字節Oracle系統上的Kimball維度設計,在移動電話和投資銀行等多個不同的行業積累了超過30年的IT經驗。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文首次發表是作爲有關數據庫和大數據的系列文章中的一篇。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"01 世界已經變了"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在過去的20年,世界發生了翻天覆地的變化。在2000年的時候,上網的人不過寥寥數百萬,還是用臺式機連56k的貓來上網,那時候亞馬遜還只賣書。今天,數十億人用智能電話或平板電腦每週7天、每天24小時上 網,幾乎什麼都在網上買,另外還使用 Facebook、Twitter和Instagram 這些社交應用與人互動。勢不可擋。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"人們的心理預期也變了。如果網頁幾秒鐘未法完成刷新,我們當即失去耐心,換個別的網站。如果某個網站無法訪問,我們擔心那就是我們所知文明的終結。如果某個大型網站無法訪問,它會成爲全球性的大新聞。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即刻滿足都還不夠!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"(Instant gratification takes too long!)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"— Ladawn Clare-Panton"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注:如果您不是經驗豐富的數據庫架構師,則您可能需要先閱讀我以前關於可擴展性和數據庫架構的文章。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"02 哪些變了?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由上可得出下列幾個結論:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可擴展性 — 流量可能出現爆炸性的增長,IT系統需要迅速擴大規模, 以處理指數化增長的事務"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高可用性 — IT系統必須每週7天、每天24小時運行,並且必須具有故障容錯性。(美國銀行2011年發生一次故障,對2900萬客戶造成持續六天的影響)。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高性能 —隨着可擴展性的不斷增強,性能也必須跟上,保持穩定和快速。據亞馬遜估算,在極端情況下,頁面加載時間每增加一秒,該公司每年要損失16億美元。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"速度 — 設備自帶的聯網傳感器越來越多(遠的不說,智能電話就自帶聯網傳感器),每秒可能會有數以百萬計的事務需要處理。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實時分析 —夜間進行批處理和業務智能化已經過時。分析與操作處理之間的界限變得模糊,對實時決策的需求越來越多。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"物聯網(Internet of Things)讓速度急劇加快!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"— Stonebraker博士(MIT) ."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上述需求催生極爲精彩的營銷術語Translytical數據庫,意思是採用混合解決方案,即同一個解決方案既可處理海量事務,也可完成實時分析。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"03 問題是什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在降低成本的同時提供高性能(可能還要使用廉價服務器),是所有數據庫廠商都面對的挑戰。但是,需求之間相互衝突:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"性能—最大限度地縮短延遲,在毫秒級時間內完成事務處理。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可用性—即使系統的一個或多個節點發生故障或與網絡斷開,也能保持運行的能力。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可擴展性—能夠不斷地擴大規模,以滿足海量數據和事務速度的要求。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一致性—提供一致、準確的結果 — 特別是在發生網絡故障時。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"耐久性—確保修改一旦實施後不會丟失。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"靈活性—提供通用的數據庫解決方案,以支撐事務及分析方面的工作負荷。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要具備海量漸進擴展能力,唯一現實的辦法就是部署橫向擴展的分佈式系統。通常情況下,爲最大地限度提高可用性,對某個節點實施的修改會被立即複製至兩個或更多個其他節點。但是,一旦將數據分配給多個服務 器,則面臨利弊權衡。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"3.1"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"性能與可用性和耐久性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/0c/0c3de5a85688d20aa6733bc0b7375271.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"▲ 地理分散式系統"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"3.2"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"一致性與可用性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"NoSQL數據庫支持最終一致性。例如,在上圖中,如果與紐約之間的網絡 連接臨時斷掉,則有兩個選擇:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"停止處理 — 但是紐約的可用性就受到了影響"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接受讀取/寫入操作 —在恢復網絡連接後消除差異。但是這麼做的風險是提供過期或錯誤的結果,可能需要解決寫"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"顯然,NoSQL數據庫是用一致性來換取可用性方面的能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"3.3"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"靈活性與可擴展性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與Oracle和DB2等通用型關係數據庫相比,NoSQL數據庫的靈活性相對較 差,(例如)不支持Join(連接)操作。除了許多不支持SQL語言的數據庫,有些數據庫(例如Neo4J和MongoDB)是專爲支持特定問題而設計的—圖處理和JSON數據結構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即使像HBase、Cassandra和Redis這樣的數據庫,也放棄關係連接操作, 但許多還限制訪問單一主鍵,並且不支持輔助索引。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"許多數據庫都聲稱100%支持ACID事務,"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實際上提供正式ACID保證者寥寥無幾。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"— Peter Bailis 博士(斯坦福大學)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"04 ACID與最終一致性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據庫解決方案的擴展方面,主要挑戰之一就是維持ACID一致性。亞馬遜採用DynamoDB數據庫,放鬆一致性約束,以換取速度,從而解決了性能問題,由此催生了大量NoSQL數據庫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外,最成功的數據庫(包括Oracle)也無法提供真正的ACID隔離性。本文研究了18個數據庫,默認支持SerializabilITy(可串行性)的數據庫只有三個(VoltDB、Ingres和Berkeley DB)。主要原因是難以在保持性能的同時支持可串行性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最終一致性是特別弱的一種模式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"系統可返回任何數據,依然可以做到最終一致。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"— Peter Bailis 博士(斯坦福)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一方面,最終一致性幾乎不提供一致性保證。下圖說明了最終一致性所存在的問題。一個用戶從銀行賬戶上扣款100萬美元,但是在賬戶修改得到複製之前,又有一個別的用戶檢查這個賬戶的餘額。唯一的保證是,只要沒有進一步的寫入操作,系統最終會提供一致的結果。這又有什麼用處呢?讓人接受就更談不上了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2e/2eb581dff94be2890266c95a346fd2b0.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"▲ Cassandra — 最終一致性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"05 重新設想OLTP數據庫"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"十年前,Michael Stonebraker博士撰寫了《架構時代的終結》(The End of an ArchITectural Era)這篇文章,認爲Oracle、微軟和IBM提出的1970年代的數據庫架構已經過時。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"他提出OLTP數據庫應具備下列特點:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"專門用於解決某一個問題 — 快速執行短暫的預定義(非即席的)事務,查詢計劃相對簡單。簡而言之,就是專用的OLTP平臺。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"符合ACID規範 — 所有事務均爲單線程運行,默認提供全部可串行性。 總是可用 — 利用數據複製(而非熱備)來提供高可用性,幾乎不增加成本。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"地理分散 —在由分散多處的機器組成的網格上無縫運行(進一步提高韌性,並局部地提高性能)"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"無共享架構 —多臺機器通過對等網格聯網,分擔負荷。添加機器是不會造成停機的無縫操作,並且失去一個節點僅會造成性能略微下降,而不是全系統停止運行。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"基於內存 — 全部在內存中運行,以提高絕對速度,通過向其他節點進行內存中數據複製來保證耐久度。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"消除瓶頸 —徹底重新設計數據庫的內部構件,實現單線程運行,同時消除重做(Redo)日誌以及鎖定和鎖存的必要性—這些都是數據庫性能最爲重大的制約。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲證明上述各項的可能性,他建了一個原型,即H-Store數據庫,並證明使用相同的硬件, TPC-C基準性能是某商業競爭對手的82倍。H-Store原型成績優異,實現了每秒處理70,000個事務,而儘管數據庫管理員付出了大量努力進行調優,某商業競爭對手每秒僅850個。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"06 世上無難事!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f0/f0b448bc6cbf2ea41ecbd6e75bf7f7a6.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"▲ 關係數據庫的處理資源消耗"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上圖顯示,有93%的系統開銷是用於傳統(歷史遺留)的數據庫系統,包括鎖定、鎖存和緩存管理。合計只有7%的機器資源是專門用於手頭的任務。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"H-Store只是通過消除上述瓶頸,使用基於內存的處理來代替基於磁盤的處理,就得以實現看似不可能的任務,即全面的ACID事務一致性,使速度提升了幾個數量級。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"07 NewSQL數據庫技術"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/33/330a48b760d5c3d00bc58106a4ac6a62.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"VoltDB最早發佈於2010年,是H-Store原型的商業化產品,屬於專用的OLTP平臺,用於Web級的事務處理和實時分析。如這張信息圖所示,目前有250種商業化數據庫解決方案,其中只有13種被歸入NewSQL技術的行列。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"08 VoltDB"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與其他NewSQL數據庫一樣,VoltDB旨在完全在內存中運行,提供定期拍攝磁盤快照的選擇。它可在本地運行於64位Linux,也可使用AWS、谷歌和Azure的雲服務來運行,採用橫向可擴展的架構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"傳統的關係數據庫將數據寫入基於磁盤的日誌文件。VoltDB則不然,是同時對內存內的多臺機器進行修改。例如,即使兩臺機器發生故障,"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"K-Safety係數爲2時即可保證不會造成數據損失,因爲數據至少存入三個內存節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事務作爲Java存儲過程(stored procedure)提交,可在數據庫中異步執行,並且數據自動分區(分片),分配至系統內的節點,儘管可複製基準數據以最大限度地提高連接性能。VoltDB有一點不同尋常,就是還以JSON數據結構的形式,支持半結構化數據。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就性能而言,2015年進行的一次基準測試顯示,VoltDB的處理速度至少是NoSQL數據庫Cassandra的兩倍,但成本只有AWS雲處理成本的六分之 一。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最後,VoltDB 6 .4版通過了極爲苛刻的 Jepsen分佈式安全性測試。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比之下,此前對NoSQL數據庫Riak進行的測試表明,即使採用最強的一 致性設置,寫入也會下降30-70%。與此同時,採用輕量級事務時,Cas- sandra 最多損失5%的寫入。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"09 MemSQL"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/07/07eb31aaa54f239fe03dcf12a0282609.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"▲ 關係數據庫的處理資源消耗"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"儘管與VoltDB有許多相似點,但上圖表明瞭一個重要的差異。MemSQL 試圖在實時事務與數據倉庫式歷史數據處理這兩種相互衝突的需求之間尋求平衡。爲此,MemSQL以行存儲(row store)的方式在內存中存儲數據, 並用面向列的磁盤存儲作爲備份,從而將實時(最近)數據與歷史結果結合在一起。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這使其在OLTP和數據倉庫(Data Warehouse)領域獲得了穩固的位置,儘管這兩種解決方案都是瞄準實時數據獲取和分析市場。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"10 哪些應用需要NewSQL技術?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要求採集速度和響應速度非常快(平均1-2毫秒),同時要求ACID保證所提供的事務準確性的任何應用—例如客戶計費。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"典型的應用包括:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實時授權 — 例如,爲了分析和計費而驗證、記錄和授權移動電話呼叫。通常,99 .999%的數據庫操作都必須在50毫秒內完成。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實時欺詐偵測— 用於完成複雜的分析查詢,以在交易授權之前,準確地確定欺詐的可能性。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"遊戲分析 —用於根據玩家的能力和玩家的典型行爲,實時動態修改遊戲難度。目標是留住現有玩家,以及將免費客戶轉化爲付費玩家。在速度、可用性和準確性要求很高的情況下,某客戶通過運用這些手段,將玩家的遊戲支出提高了40%。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"個性化Web廣告 — 實時動態地選擇基於 Web 的個性化廣告,記錄廣告呈現事件以用於計費,同時記錄廣告結果以用於後續分析。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與絕大多數OLTP應用相比,這些起初看來都不起眼,但是在每週7天、每天24小時聯網的世界,這些爲實時分析提供了新的疆域,並且隨着物聯網的興起,也帶來了巨大的機會。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"11 結論"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然Hadoop與大數據的關聯更爲密切,並且近來獲得巨大的關注,但數據庫技術是任何IT系統的基石。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"類似地,NoSQL數據庫爲替代關係數據庫提供了一個快速、可擴展的選 擇,但是儘管有免許可開源數據庫的誘惑,事實上還是一分錢一分貨。另外,正如VoltDB所顯示的那樣,實際上長期來看,可能比NoSQL類的選擇更爲便宜。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"總的說來,如果有Web規模、OLTP和(或)實時分析的要求,則需要認真考慮NewSQL類數據庫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您對VoltDB的工業物聯網大數據低延遲方案、全生命週期的實時數據平臺管理等感興趣,歡迎私信,進入到我們的官方交流羣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章