2005年,數(shù)據(jù)庫教父Michael Stonebraker曾表示,數(shù)據(jù)庫市場中“一體適用”的心態(tài)是一個(gè)“已經(jīng)成為過去時(shí)”的想法。顯然,微軟不太同意Stonebraker的觀點(diǎn)。今年5月中旬,微軟推出了Azure Cosmos DB,一個(gè)新的數(shù)據(jù)庫,據(jù)說可以適用一切。
適用一切?恐怕沒那么容易
關(guān)系型數(shù)據(jù)、文檔和圖表當(dāng)然會(huì)支持,強(qiáng)一致性和最終一致性也都同樣支持。事實(shí)上,Cosmos DB有五種一致性模型可供選擇。
意料之中的是,在媒體發(fā)布會(huì)上,一名開發(fā)者滔滔不絕地說,它“絕對擊敗了云中的任何競爭對手”,而且“不明白為什么你還要去選擇其他的東西”。微軟甚至也不那么令人吃驚地同意了,稱Azure Cosmos DB是“第一個(gè)全球分布式的數(shù)據(jù)服務(wù),它允許您在任意數(shù)量的地理區(qū)域內(nèi)彈性地?cái)U(kuò)展吞吐量和存儲(chǔ),同時(shí)保證低延遲、高可用性和五個(gè)定義良好的一致性模型。”
然而,“陽光下的一切”產(chǎn)品的問題在于,它們獲得寬度的同時(shí),往往會(huì)在深度上有所遺失。正如一位前MongoDB高管所說的那樣,“當(dāng)你告訴我你的數(shù)據(jù)庫做了所有的事情時(shí),我想到的是它的一切都很平庸。”
也許他說的有道理。
你的工作內(nèi)容也許只有一項(xiàng)
雖然NoSQL并沒有將通用關(guān)系數(shù)據(jù)庫淘汰掉(如MySQL仍然堅(jiān)挺),但它為市場提供了不同的方法來適應(yīng)不同的應(yīng)用需求。正如ArangoDB的董事會(huì)成員Luca Olivari告訴筆者的那樣,“鍵值存儲(chǔ)在極其簡單的數(shù)據(jù)中非常快,文檔存儲(chǔ)對于復(fù)雜的數(shù)據(jù)是非常出色的,而圖表解決方案則是瞄準(zhǔn)高度互聯(lián)的數(shù)據(jù)。”
有些人會(huì)無視數(shù)據(jù)庫市場的分裂。Olivari補(bǔ)充說,掌握這些系統(tǒng)需要“一個(gè)陡峭的學(xué)習(xí)曲線(其實(shí)是很多陡峭的學(xué)習(xí)曲線)”,而且, “同時(shí)保持你數(shù)據(jù)的一致性、你應(yīng)用程序的容錯(cuò)性和你架構(gòu)的精益性基本是不可能的。”
不管你喜不喜歡,這就是我們所生活的世界。上DB-Engines.com看看,你會(huì)發(fā)現(xiàn)數(shù)以百計(jì)的數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫都有自己的定位。Stonebraker在十年前就把這一趨勢稱為:
在過去的25年中,商業(yè)DBMS的開發(fā)可以用一句話概括:“一體適用。”這個(gè)短語指的是傳統(tǒng)DBMS架構(gòu)(最初設(shè)計(jì)的和業(yè)務(wù)數(shù)據(jù)處理優(yōu)化)已經(jīng)被用于支持許多不同特色的以數(shù)據(jù)為中心的應(yīng)用程序和要求…這一概念已經(jīng)不再適用于數(shù)據(jù)庫市場,而且我們認(rèn)為商業(yè)市場將會(huì)分裂出一批獨(dú)立的數(shù)據(jù)庫引擎。
這一預(yù)測在MongoDB、Apache Cassandra、Neo4j和其他NoSQL數(shù)據(jù)庫進(jìn)入市場的幾年前被提出,可以說是非常有先見之明的。Thoughtworks的Martin Fowler解釋了這種“混合持久化”的原因:“任何一個(gè)像樣的企業(yè)都有不同類型的數(shù)據(jù)存儲(chǔ)技術(shù)需求。”
換句話說,一個(gè)“面面俱到”的數(shù)據(jù)庫可能并不存在。事實(shí)上,幾乎可以肯定,它是不存在的。
多模型在做夢嗎?
當(dāng)然,并不是所有人都同意這一點(diǎn)。幾年來,圍繞“多模型”數(shù)據(jù)庫的趨勢越來越多,Azure Cosmos DB只是其中最新的一個(gè),還有ArangoDB、OrientDB等等。Serdar Yegulalp認(rèn)為,在這種多模式的數(shù)據(jù)庫中,尤其是在微軟在數(shù)據(jù)庫市場上的重要性和經(jīng)驗(yàn)的支持下,Azure Cosmos DB可能會(huì)“讓我們在挑選這些產(chǎn)品時(shí)無需搖擺而糾結(jié)。”
Olivari更進(jìn)一步說,“原生的多模型數(shù)據(jù)庫,比如ArangoDB,是用不同的模式來處理數(shù)據(jù)的——鍵值對、文檔和圖形。它們允許開發(fā)人員自然地使用一種簡單的查詢語言,就像編寫代碼一樣。只學(xué)習(xí)一種語言,只有一個(gè)需了解和操作的核心,只需一種產(chǎn)品支持,從而使每個(gè)人的生活變得更加輕松。”
你可以通過將不同模型的數(shù)據(jù)映射到一個(gè)公共的后端來支持多個(gè)數(shù)據(jù)庫模型,另一種說法是支持特定的數(shù)據(jù)庫。微軟的DocumentDB(后來演變?yōu)榱薈osmosDB)試圖在文檔數(shù)據(jù)庫領(lǐng)域中擊敗MongoDB,但是失敗了,又不得不接受MongoDB的wire協(xié)議,允許MongoDB開發(fā)人員使用他們首選的MongoDB驅(qū)動(dòng)程序和工具鏈將數(shù)據(jù)推進(jìn)到DocumentDB中。值得一提,IBM在2013年也曾嘗試過同樣的事情。
兩大公司都沒能把MongoDB的人氣轉(zhuǎn)移到他們的錢包里。很難想象一個(gè)多模型數(shù)據(jù)庫能有什么作為,從定義上說,它是一個(gè)“全行業(yè)”的數(shù)據(jù)庫,試圖取代所有流行的數(shù)據(jù)庫。
同樣,開發(fā)人員也不會(huì)喜歡這種情況,大家都在試圖掌握某一種模式,如今給他們更多的選擇只會(huì)讓工作變得更加艱難。
也許這就是多模式數(shù)據(jù)庫在過去一年中不斷下滑的原因之一:例如,OrientDB從一年前的41位跌至第46位。瀏覽一下其他的多模型數(shù)據(jù)庫,情況大致相同。
Azure Cosmos DB可能有所不同。它可以重新定義類型,并交付每個(gè)數(shù)據(jù)庫模型、所有類型的一致性和大規(guī)模。微軟在數(shù)據(jù)庫方面的專業(yè)知識(shí)可能會(huì)使其成功,唯一對其成功有不好影響的是一個(gè)根深蒂固的想法,即“一體適用”數(shù)據(jù)庫都不能真正地與專業(yè)數(shù)據(jù)庫競爭。
根據(jù)Stonebraker的說法,通用關(guān)系數(shù)據(jù)庫比其他任何數(shù)據(jù)庫都要多,但這種策略已經(jīng)失敗了,而且將會(huì)在未來更加戲劇性地失敗。