【編者按】Henrique Lobo Weissmann 是一位來自于巴西的軟件開發(fā)者,他是 itexto 公司的聯(lián)合創(chuàng)始人,這是一家咨詢公司。Henrique 在博客上會談很多數(shù)據(jù)庫方面的內(nèi)容,日前他撰文稱:非關(guān)系式數(shù)據(jù)庫MongoDB正逐漸變得無關(guān)緊要,值得大家關(guān)注,特別是正在和打算使用 MongoDB 的開發(fā)者關(guān)注。
「補充」雖然Henrique 認(rèn)為 MongoDB 正變得無關(guān)緊要,不過資本市場對 MongoDB 非常認(rèn)可,最新消息顯示,2015年MongoDB獲8000萬美元融資,估值超過15億美元,期待MongoDB的改進(jìn)和發(fā)展。
在近日 DB-Engines公布的最受歡迎數(shù)據(jù)庫評選中剛剛當(dāng)選了非關(guān)系式數(shù)據(jù)庫的冠軍(前四位都是關(guān)系式數(shù)據(jù)庫,分別是 Oracle、MySQL、MS SQL Server 與 PostgreSQL),這已經(jīng)是它第二次蟬聯(lián)了。
以下為譯文:
我與MongoDB的關(guān)系可分為三個階段。對于目前處于第三階段的我來說,這款產(chǎn)品似乎變得無關(guān)緊要了。很快你就會明白為什么我這么說。
階段一:癡迷
我與MongoDB的第一次接觸十分神奇:一個poliglot持久性架構(gòu)用它來處理部分系統(tǒng),而框架的關(guān)系模型卻不是很適合。然而它運行得十分漂亮:快速、易于安裝和使用,并且運轉(zhuǎn)良好。不得不說,MongoDB很適合應(yīng)用于此類情況。
它的表現(xiàn)震驚了我:事實上,我主要的查詢語言是JavaScript,這已經(jīng)十分了不起。我從未奢望類似的東西能運行得如此出色。在那段時間里,我詳細(xì)了解了這款產(chǎn)品以及如何管理它配給的文檔模型。
階段二:現(xiàn)實
也許這個階段更好的名字應(yīng)該是成熟。在這個階段,我知道在什么情況下該使用MongoDB,更重要的是,什么時候不該使用MongoDB。這時,你會發(fā)現(xiàn)MongoDB是一款很好卻需要謹(jǐn)慎使用的產(chǎn)品。它提供的文檔模型強(qiáng)大到能幫你解決很多但卻不是全部問題:實際上,只是相當(dāng)多而已。
我是從自己和別人的失敗上意識到了這個問題。很多人非常興奮的想要把世界簡化成一個模式,于是MongoDB就可以成為所有問題最完美的解決方法。但每當(dāng)這些時刻,一些不符合想象卻真實存在的事實就會砸到你臉上證明你的想法是錯誤的:
關(guān)系模型并沒有它們表現(xiàn)的那么糟糕。事實上,這種模式目前十分流行,而且在未來很長一段時間內(nèi)它的地位都不會改變,究其原因:它管用。并且與NoSQL相反,我們手里有各種適用于此模式的好的或者壞的的實踐方法。ACID事務(wù)。MongoDB有一點惱人的地方:不能創(chuàng)建一個事務(wù)處理多個文檔。于是問題來了:多數(shù)情況下,你必須同時進(jìn)行多文檔處理。在你知道你的系統(tǒng)需要什么之前,所有以上談到的強(qiáng)大性能,都和你關(guān)系不大。
在這個階段,所有的激動人心和相見恨晚都消失了,這是所有人都會有的。這時,你會知道這款工具可以做什么以及不能做什么。這是最好的階段。
階段三:無關(guān)緊要
現(xiàn)在MongoDB對于我來說已經(jīng)變得無關(guān)緊要了。當(dāng)然不是指文檔模型,而是產(chǎn)品。有一天早上我醒來,突然意識到我不再需要MongoDB了,因為對于我的項目來說,其替代品更具吸引力。它們是分批來的。
第一波:TokuMX
TokuMX是MongoDB的一個分支,我喜歡稱之為“MongoDB迷人的雙胞胎兄弟”。它與MongoDB使用同樣的通信協(xié)議,采用基本相同的命令,并可與MongoDB 100%兼容。但它具有一些MongoDB沒有的強(qiáng)大優(yōu)勢:可以進(jìn)行多文檔ACID處理??煊贛ongoDB(快50倍速)。存儲消耗比MongoDB少90%。與MongoDB 100%兼容。所有你需要做的就是將MongoDB實例更換成TokuMX,然后轉(zhuǎn)移數(shù)據(jù)(這是相當(dāng)容易的),這樣你就大功告成了。
是的,與MongoDB一樣,它也是開源的,而且有運行非常好的免費版本。當(dāng)然,它也不是完全無懈可擊。它有兩個局限:沒有Windows發(fā)布(Distribution )。目前Java庫還不能提供MongoDB ACID執(zhí)行的本地支持。它可以使用,但仍需要一些樣板代碼。
TokuMX第一次讓我意識到MongoDB對我來說似乎無關(guān)緊要。當(dāng)然,這可能只是暫時的:在日后版本發(fā)布后,MongoDB仍有可能擊敗TokuMX。但是,也只能寄希望于日后版本。目前為止,它做不到。
第二波:PostgreSQL
如果說TokuMX讓我覺得MongoDB無關(guān)緊要,那么PostgreSQL 9.2則強(qiáng)化了這一印象。自9.2版本,PosetgreSQL開始對JSON和JSONB數(shù)據(jù)類型提供支持。這是一個有意思的解決方案,因為它,我可以得到關(guān)系模型中具有文檔靈活性的好的部分。而所有這一切都基于同樣的產(chǎn)品。太好了!
但是MongoDB曾比PostgreSQL的具有更高性能。我說“曾”是因為PostgreSQL 9.4版本使其變成了歷史:最近的基準(zhǔn)顯示,PostgreSQL在處理JSON數(shù)據(jù)類型上比MongoDB更快。我沒有想要比較PostgreSQL和TokuMX,但鑒于兩者現(xiàn)在都比MongoDB擁有更好的性能,我想大家已經(jīng)清楚我的觀點了。
結(jié)論
與 TokuMX 和 PostgreSQL 相比較使得 MongoDB 處于劣勢。但它仍然是一款很好的產(chǎn)品,而且會繼續(xù)改進(jìn)來與這些替代產(chǎn)品競爭,然而目前來看它最多只能排在第三名。不過資本市場對 MongoDB 非常認(rèn)可,最新消息顯示,2015年MongoDB獲8000萬美元融資,估值超過15億美元。期待MongoDB的改進(jìn)和發(fā)展。