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