oceanbase、TiDB這類NewSQL最近勢頭好強勁,它們的定位究竟是什麼?

它們會成為nosql的終結者么?或者在未來直接替代MySQL、Oracle這類傳統單機資料庫?

PS:最近MySQL Group Replication剛發布,三副本強一致、多點寫入等新特性讓人眼前一亮,不禁感慨開源社區的力量,如果後續再支持分散式,那麼在這樣一個高可用、強一致、可擴展、完全兼容MySQL協議的官方資料庫面前,oceanbase、TiDB的優勢又在哪裡呢?

究竟誰才是資料庫的未來?


首先要明確的是,沒有完美的系統,任何一個系統的出現都是為了解決當時最主要的問題,但是會產生一些其他的小問題,跟葯一樣,能治病,但是一般都會有副作用。

那麼完美的資料庫系統什麼樣呢,我現在能想到以下幾點:

1.易用與靈活性:資料庫可以理解自然語言,我跟它說我要存儲什麼樣的數據,就存進去了,要查詢什麼樣的數據,就給我取出來了,不需要我告訴它怎麼存,怎麼取

2.擴展性:可以存儲無限多的數據,不需要擔心容量的問題

3.高性能:性能非常強大,不管想存或取什麼數據,瞬間就完成了

4.高可用:數據存儲之後,永遠也不會丟,系統永遠也不會掛掉,1年365天,1天24小時隨叫隨到

5.並發與隔離性:資料庫不僅可以滿足我一個人,也可以滿足所有人的同時讀寫,並且我們之間互不干擾

關係資料庫之前的存儲系統基本上一個條件也不滿足

傳統單機關係資料庫一定程度上解決了問題1、3、5,用戶不需要知道數據是怎麼存儲的,行存儲還是列存儲或者其他的結構信息,查詢的時候用SQL就可以了,不需要根據數據的存儲結構編寫特定的程序,大大簡化了應用開發,性能也還可以。之所以說是一定程度上,是因為並沒有完美的解決。SQL雖然很簡單,但要比自然語言複雜得多,更改表的schema也不是特別方便;性能的話對於複雜查詢,優化器無能為力,可能會給出性能非常差的查詢計劃;並發與隔離性可以做到,但是要犧牲性能

Mysql Group Replication幫助傳統單機關係資料庫解決了問題4

如果數據量不大,這樣用著也不錯了。但是互聯網導致了數據量的爆炸式增長,單機存儲不下這麼多數據了。所以才會出現了Bigtable等NoSQL分散式資料庫,解決當時最主要的數據量暴增問題。這些系統一定程度上解決了問題2、3、4。它想不想解決其他問題呢?肯定想,但是要解決這些問題,系統會變得更加複雜,需要更長的時間,但是系統需要快速上線啊,那麼就先把最主要的問題解決了就好。隔離性就由業務部門自己去解決吧,這也導致了後來業務部門很多的抱怨。所以我覺得NoSQL在開發的時候是有很多妥協的,屬於救火的產品,不可能成為未來的方向。

目前看來OceanBase、TiDB、Spanner/F1這些系統是能夠解決上述問題最多的系統。

1.支持SQL

2.數據被拆分成一個個range,分散在不同的伺服器中,通過增加伺服器就可以一定程度上的線性擴容

4.多副本,並且通過paxos或raft保證多副本之間的一致性

5.通過2PC,MVCC支持不同隔離級別的事物

但是相比高端伺服器上的單機資料庫,性能會有些問題

查詢的延遲(latency)會比較高,網路是一個問題,比如分散式join就要用到網路,有人做過實驗,在不改變現有查詢引擎的情況下,單條查詢隨著伺服器數量增多,性能不增反降,把網路換成InfiniBand效果也不好,後來重新設計了查詢引擎,性能做到了遞增。可以參考High-Speed Query Processing over High-Speed Networks(http://www.vldb.org/pvldb/vol9/p228-roediger.pdf)

所以需要改變很多傳統的做法,針對新硬體進行新的設計、優化,是可以大幅度提高性能的。

未來不敢說,單機資料庫在很多場景下還是會有廣泛應用的,NewSQL最起碼接下來的幾年裡都還有很大的發展潛力,而NoSQL,分散式中間件等方案基本上就是明日黃花了。


mysql GR更像share data的rac和pureScale,容量和計算的擴展能力有限,它們的出現更多的意義是對傳統的單機mysql oracle db2在可用性上的補充。使用起來與傳統單機實例沒有差別。

oceanbase tidb spanner是share nothing的架構,單個分區有paxos保證可用性的前提下,還有近乎線性的擴展能力,而代價是複雜查詢和DML,不一定都能生成下推執行的plan,要麼無法執行要麼執行很慢。再有就是分散式事務一致性的代價,分散式快照讀代價較大。


MGR 提供的是高可用的能力,並不是分散式的能力。從單機到分散式,是一條很長的路,而且 MySQL 有這麼重的歷史負擔的情況下,估計會走的比較難。

TiDB 從架構上就比較適合分散式場景,在開發過程中的各種決策也是以如何適應分散式場景出發來思考。我們剛開始開發的時候也想過做直接用 MySQL 做 SQL 層,接入分散式存儲引擎,但是評估後認為直接寫一個比修改 MySQL 更簡單。


AWS Aurora資料庫走的是哪個路線呢?NewSQL和關係資料庫的區別是啥?


一個簡單的區別是,即使你用了mysql replication group(首先需要穩定下來),還是需要自己分庫分表,自己讀寫分離,自己分散式事務,自己負載均衡。。。它不解決擴展性問題。

而這些oceanbase都有,and more


非常關注這個問題,特別是哪些業務上才是真正需要NewSql呢?這個問題應該也是tidb,rethinkdb這類獨立技術提供商所特別關心的。

感覺我的經驗和理解,NewSql只說一個優勢的話:那就應該是scalability,目前看真正需要它的基本都是大型互聯網公司,可互聯網公司內部輪子一大堆,利益關係又複雜,都想做輸出,真沒有幾個能接受別人的產品。

而傳統企業市場,幾個節點的集群就能滿足大多數企業用戶的需求了(更需要的是及時有保障的客服),同時傳統渠道和人脈的影響又很大(國內國外都如此),所以在企業級市場去IOE還是很難的,也許是一個長期的過程。

在技術上看,NewSql消滅不成熟的NoSql(謹慎懷疑以MongoDB為代表,個人看法)是一定的。

最後,我認為未來的幾個可能:

搭配上雲(oceanbase),社區化(tidb,綁定大多數公司的利益)。

歡迎大家探討!


現在還在摸索階段,誰都不能保證下一秒Oracle/M$用自己的多年資料庫積澱做出瞬間秒殺當前所有NewSQL的方案來。

TiDB底層依賴別人的東西,對細節的操控上是比不上全部自己控制的Oracle和SQL Server的,當然這只是一個說明差距的例子,時機成熟需要的時候TiDB也不是做不到自己把底層也全部掌控。

所以這暫時來說是個混亂的狀態,要麼觀望要麼入局也分一杯羹。現階段我個人判斷這些NewSQL主要還是在OLAP領域佔有優勢,OLTP目前這方案對不對都難說。

這種OLTP上scale out的方案不一定對,說不定搞到最後單機成本也會高昂到等於scale up,就拿萬兆交換機來說就不是便宜貨,上了萬兆交換機你捨得用PC做集群嗎?一堆貴的東西組合在一起作為一個系統,不也可以綜合起來理解為一種新的高性能機器(scale up)嗎?比如Oracle的Exadata


OceanBase的定位是關係資料庫(當前主要是OLTP),目前做了MySQL兼容,並且在螞蟻金服全部核心上使用,可以參考以下幾段文字:AliSQL和OceanBase是什麼關係,在阿里內部使用場景有哪些不同? - 資料庫 - 知乎 ;淘寶研發的 OceanBase 相比其他開源的 noSQL 資料庫有什麼獨特的優點?


mysql oracle 等這類關係型資料庫,依賴的理論基礎都是80 90年代甚至更早的,那時還沒有互聯網,生產的數據不多,硬體更多是向大型機方向,而互聯網這個巨獸一經啟動,就源源不斷生產數據,這些數據的量級和處理場景,遠遠超出之前的理論水平,所以在PB級數據的存儲和分析面前,關係型資料庫顯得很無助,RDB引以為豪的索引技術也沒什麼卵用,許多大公司開發各種xx資料庫,也是迫不得已。計算機的發展是需要理論基礎的,在新一代的理論出現之前,各家都會嘗試自己的解決方案,出現百花齊放就不足為奇,但是每個都只能解決特定場景的問題,一統天下的局面,得等到分散式領域的理論有實質的突破才行。


這麼先進的分散式軟體不知道能節省多少人力,提高多少生產力,時間說明一切,再過一兩年再看


抖個機靈:TiDB存在的意義在於解放後端工程師,消滅中間件。


說這個好那個不好,都有失偏頗,不同的產品能夠出現並佔領一定市場席位,必定在細分領域有其不可替代的優勢存在。

任何一個產品的出現一定有其剛需存在,就拿資料庫來說,摘抄一段高級開發人員的自述「所以很明顯,我們當時的訴求就是能有一款資料庫既能像 MySQL 一樣便於使用,最好能讓業務幾乎不用做任何修改,又能滿足分散式的存儲需求,還要保證很高的複雜查詢性能。」,

摘取關鍵字:「便於使用」「不做任何修改」「存儲需求」「複雜查詢性能」。

再來看看TIDB的核心特徵:

TiDB 具備如下 NewSQL 核心特性:

  • SQL支持 (TiDB 是 MySQL 兼容的)
  • 水平線性彈性擴展
  • 分散式事務
  • 跨數據中心數據強一致性保證
  • 故障自恢復的高可用

TiDB 的設計目標是 100% 的 OLTP 場景和 80% 的 OLAP 場景。

特性和需求是不是有一一對應的關係?


離開需求談未來是流氓。

mysql,Oracle自有他們的生存空間,當一台伺服器可以解決的問題,是最好的選擇。但是一台伺服器解決不了的場景僅僅少部分企業需要。

nosql的優勢在於可擴展性,利用機器群,提高服務上限。想像下如果淘寶雙11訂單寫入伺服器只有一台,用傳統sql資料庫,得是多麼牛逼的一台伺服器,這個伺服器更新換代能跟上雙11的增長速度嗎。如果不行,分散式資料庫是唯一選擇。

但這個沒有優劣之分,大部分企業用sql足以,也是最穩定的。分散式資料庫穩定性還要經過大量實踐。


oceanbase啥時候成了newsql了

tidb不值一提


推薦閱讀:

TAG:資料庫 | OceanBase | NewSQL | TiDB |