MongoDB和MySQL如何搭配使用?
01-15
在實際業務中,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?