關于Uber選擇MySQL的思考

在數據庫圈子,大家都知道今年uber干出來一件大事件,把postgresql切換到了mysql,當時社區里一陣喧嘩。事情已經過去半年多了,這里我不想去和大家再次討論這兩個關系型數據庫那個更好。只是想帶著大家思考一下選擇的背后。

在該事件中,Uber提出來遷移的一個重要原因是:在大量更新的業務場景下PostgreSQL的IO方面有過多的開銷(主要是從存儲結構上說明),對于使用SSD或是PCI-E卡的設備基本無法容忍寫放大,同時又提出了以下需求:

  • 需要有寫緩沖能力,萬一持久化到數據庫失敗時,仍可以稍后重試。

  • 需要通知下游依賴關系的方式,數據變更要能無損的通知出去。

  • 需要二級索引。

  • 系統要足夠健壯,可以支持7X24服務。

  • 最重要一點,需要SchemaLess的存儲支持

  • 要有能力通過增加服務器動態擴容。增加服務器不但要增加可用的硬盤容量,還要減少系統的響應時間。

Uber針對這些需求也和其它互聯網廠家一樣,嘗試過Cassandra, Riak,MongoDB,也想過自研,但最終選擇了MySQL作為存儲層。 這里反問一下: MySQL能滿足上面的需求嗎? 例如:

  • SchemaLess 存儲支持

  • 寫緩沖能力,較快的故障切換

  • 較好的擴容能力

大家的印象里第一條 Schemaless都可以把MySQL秒了,但從文章里看 Uber技術負責人:Jakob Thomsen 最終使用了MySQL做Schemaless存儲方案。我的神啊,大家沒看錯,沒看錯,就是使用的MySQL做的schemaless存儲方案。

帶著好奇心驅動,再來看一下MySQL,你會發現從MySQL 5.7 引入了兩個重量級的特性,正好符合Uber的需求:

  • DocumentStore

  • X-協議

下面分別說明一下:

DocumentStore

從MySQL 5.7后可以認為MySQL也開始NoSQL了,支持json類型,加入更多的json支持 。感受一下:

關于Uber選擇MySQL的思考

支持CRUD等傳統SQL操作。為了更好的支持NoSQL接口,在此基礎又推出了另一個重量級的協議:X-協議。以及圍繞著推出一堆的?mysqlsh ,各種程序的?Driver。如果你現在還不去了解,可能很快就Out嘍

X-協議
全新的協議, 減少交互開銷, 減少消息大小,支持管道處理,支持通知處理

對NoSQL支持更友好,更豐富的數據處理接口,考慮到數據Sharding實現
?更高速的Query響應

上面這兩個功能也是MySQL 8.0要重點發力的兩個功能。知識更新很快,如果還不知這兩個的特性的朋友,要抓緊時間更新一下知識了。MySQL開始要發威了,最近更新非常的快。

也正是這兩個特性,正好滿足Uber的需求,基于NoSQL接口存儲,底層數據保障使用MySQL的Replication復制(MySQL Group Replication馬上也GA了)。在NoSQL接口層很容易做到數據的拆分及路由設制,底層復制又較好的保證的數據可用安全性。

MySQL已經不是當初的那個關系型數據庫了,現在有更多特性需要你去深入挖掘

以上就是關于Uber選擇MySQL的思考的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享