如何評價InfoQ文章《別再用MongoDB了!》?

文章鏈接:

別再用MongoDB了!

內容摘要:

Sven Slootweg (joepie91)是一名黑客,同時也是CrytoCC的創建者,現在提供Node.js代碼評審服務。近日,他在個人博客上發表了一篇博文《為什麼你應該永遠、永遠、永遠不要再使用MongoDB》。在文中,他列舉了如下理由:

  • 丟失數據(見1、2);
  • 默認忽略錯誤,假設每次寫入都是成功的,在32位系統上,這可能會導致數據無聲無息地丟失;
  • 即使是在MongoDB宣傳的適用場景下,其性能依然不高(見3、4);
  • 幾乎在所有的應用場景下,開發者都會被迫養成使用隱式模式的壞習慣(見4);
  • 存在鎖問題(見4);
  • 對安全問題響應很慢(見5);
  • 不符合ACID(見6);
  • 擴展和維護困難;
  • JSON存儲也不是MongoDB獨有的功能,PostgreSQL、CouchDB也支持(見7、8)。

另外,他也不認為MongoDB適合於創建原型,因為如果生產環境使用不同的資料庫,則還需要重寫所有的代碼。總之,MongoDB並沒有什麼適用場景。它在技術上比不上其它可選方案,並沒有提供真正有用的獨有的特性,而且開發人員也無法確保數據一致性和安全。

網友karmakaze也認為,有了PostgreSQL 9.4,就沒有任何理由要使用MongoDB了(JSONB比BSON更合用),另外還可以使用CouchDB。

對於MongoDB,日常使用確實較為方便,但是否如文章所述真的存在諸多問題?

以及MongoDB存在的問題,是其本身的實現問題,還是NoSQL普遍存在的問題?

以及是否真的不應該使用MongoDB?


《別再吃小龍蝦了!》

《別再吃肯德基了!》

《看了這些,你還敢喝可樂嗎?》


謝邀。

如果你能看到Oracle的源碼,估計你也不敢去用它了,更何況年輕青澀的MongoDB。

無論MongoDB、Mysql、Nagios,甚至Windows、VMare等等,如果你真去深入研究它們的文檔、配置、源碼(如果有)、設計,到最後你肯定會發現一堆莫名其妙的坑爹代碼或設計而感到震驚。人無完人,軟體也一樣。

擁抱它,接受它,學習它,改造它。這才是高手應有的態度。

做好驗證、備份策略,打點雞血,讓我們一起擁抱MongoDB,擁抱未來。

-------------------

針對原題:

1.MongoDB丟數據、默認忽略錯誤、使用隱式模式的梗,其實是一個設計問題。而且,誰讓你們不去閱讀官方文檔?怪MongoDB咯?

人家MongoDB在官方文檔里已經說明了相關策略與參數,只是沒明著告訴你這樣做會丟數據而已。稍有些系統設計或架構經驗的人應該能一眼猜出背後的代碼肯定存在丟數據的隱患。不僅如此,Mysql、Nagios等都存在這類會丟數據且不彙報的隱患設計,VMware早期版本甚至會在克隆失敗時導致des丟失 + src故障。

其次,人家MongoDB只是一個開源產品,丟少量數據很正常。就連Oracle在極端情況下都會丟數據,更何況MongoDB。如果你一定要保證數據零丟失零錯誤,那麼,首先你們根本就不能用PC。知道原因嗎?看看你們公司的開發、DBA是不是用PC了?

2.MongoDB本來就不是高性能產品,性能不高很正常。

3.存在鎖問題:你來告訴我哪個資料庫不存在鎖問題?

4.對安全問題響應很慢:MongoDB不成熟,請給它發展的時間。

5.不符合ACID:人家MongoDB本來就不是遵循ACID的產品,你非要拿MongoDB當關係型資料庫用,怪MongoDB咯?

6.擴展和維護困難:說擴展困難,我只能說:不花時間看MongoDB文檔,就別唧唧歪歪。至於維護困難,因為MongoDB一直以來缺少強力的工具與驅動。

7.JSON存儲也不是MongoDB獨有的功能:人家MongoDB也沒說這是MongoDB獨有的功能啊~


或許那篇文章寫得有些過,不過這麼多人一邊倒地頂mongo還是讓我有些詫異的.本來我是想來發問題大家在使用mongo(5000萬以上數據量)時都遇到過哪些問題的,看到這個問題就進來想看吐槽,結果各位的評論讓我傻眼了,都是原型高手么?

我想說的是mongo如果要商用,首先要尊重客戶的各種硬體資源,如果你這麼揮霍CPU,硬碟,內存,至少要性能讓人無法拒絕,然而.....

歡迎各種億級商用數據的mongo使用者前來defense.


先了解他,再用他。調研時可以看這種標題的文章,但別當真。越來越多的人在用,db-engine能排第五,已經說明一切了,退一萬步說,至少有他適用場景。


一個被標題鎮住了的mongodb初學者,

在看了各位大神的評論後,又開始老老實實肯基礎。


如果遇到這種煞筆標題,千萬不要點進去看,純粹的浪費時間


好像已經澄清了,這是某人的惡搞


這篇文章講的mongodb問題.我暫且不知.其中有一句話有道理.不要因為其他人都用你也用.你要自己研究他的缺點優點,以後我在使用軟體時候.也謹記這句話


謝不邀。

這要看你用mongo哪個版本的,而且得看你是不是腦殘的不調任何配置就上生產,具體mongo中文社區大神發過文來吐槽這篇秀智商的文章,搜下吧


你應該先明白mongodb的用途在哪,再拿Nosql的優點和關係型資料庫做比較,說不定你會好奇為什麼要用mysql…(當然,開個玩笑)


都有合適的應用場景,比如社交,吐槽等互聯網應用,最好是關係型和NoSQL混合。若是用單純MongoDB做企業級數據應用的話,純粹給自己找麻煩。


太過激進的評論,但是也不無道理,mango不是萬能的,不要隨便使用,同時,替代方案很多,效果可能更好,例如,PostgreSQL9.5以上版本和MySQL8。所以,謹慎使用新技術,因為隨便亂用,帶來的代價,可能比收益更高。


這都老梗了…我記得10gen有專門的文章反駁

http://m.csdn.net/article/2012-11-15/2811920-mongodb-quan-gong-lue


推薦閱讀:

c++ 實時消息系統什麼in-process資料庫比較好? leveldb、LMDB 還是sqlite?
Mac下如何學習資料庫?
如何評價RethinkDB?和MongoDB,Redis有什麼區別?
新浪微博「點贊功能」資料庫如何設計的?

TAG:資料庫 | SQL | NoSQL | MongoDB |