MongoDB和MySQL如何搭配使用?

在實際業務中,MongoDB和MySQL如何搭配使用?什麼樣的場景下適合寫入MongoDB?比如做一個待辦事項的應用,有當前待辦、分類、排序、歷史事項、回收站等功能,那些場景適合搭配MongoDB來提升業務響應速度?


這其實就是NoSQL和SQL的應用場景的區別。另外現在貌似pgSQL也支持JSON了,似乎性能可以喝MongoDB媲美。

MongoDB這種文檔型的NoSQL基本可以看成一個鍵值對存儲,如果你的業務總是能知道key,那麼MongoDB是一個好選擇,比如遊戲的玩家信息(因為總是知道玩家ID,而且玩家ID是適合做主鍵的),就是非常典型的NoSQL的應用場景。另外一點就是可以存儲多種數據類型,比如有的時候我們想存一個列表,在MySQL中就只能拼成字元串來存,但是NoSQL本身就支持列表,所以可以儘可能的保持數據結構。

SQL的強項還是關係模型了,在不知道主鍵的情況下,查詢的靈活性和效率都能得到很好地優化,適合網站這類的應用,因為很難提前確定要根據某個條件進行查詢,關係模型的表達能力是很強的。

搭配的話,就是傳統業務很成熟穩定的框架該用MySQL還用MySQL,如果是有大量的鍵值對數據需要隨機存取,可以將這些數據放在MongoDB中。


mongo做與業務關係不太大、更利於查詢的存儲,例如日誌、報表。

mysql做核心業務數據存儲。


對事務有要求的不能用mongo。數據量大的、結構多變的可以用mongo,有了mongo再也不用拆表了


1.schema free可以作為一個選擇的點

2.spatial index可以作為一個選擇的點

3.capped collection可以作為一個選擇的點

4.做cluster和sharding時的較易運維性也可以作為一個選擇的點

等等吧,特別是3.x版本中有很多重大改進。

當然mongo的缺點也很多,適合你的場景就好


一位MySQL用戶如何評估MongoDB:MongoDB Through a MySQL Lens 作者也討論哪些使用場景比較適合採用MongoDB


推薦閱讀:

知乎為什麼不使用 NoSQL 資料庫?
Cassandra現在的應用前景怎麼樣?
如何評價InfoQ文章《別再用MongoDB了!》?
c++ 實時消息系統什麼in-process資料庫比較好? leveldb、LMDB 還是sqlite?

TAG:NoSQL | 雲服務 | mongo | 大數據 |