對比MySQL,什麽場景MongoDB更適用
原文鏈接: http://page.factj.com/blog/p/4078
MongoDB已經流行了很長一段時間,相對於MySQL,究竟什麽場景更需要用MongoDB?下面是一些總結。
更高的寫入負載
默認情況下,MongoDB更側重高數據寫入性能,而非事務安全,MongoDB很適合業務系統中有大量“低價值”數據的場景。但是應當避免在高事務安全性的系統中使用MongoDB,除非能從架構設計上保證事務安全。
高可用性
MongoDB的復副集(Master-Slave)配置非常簡潔方便,此外,MongoDB可以快速響應的處理單節點故障,自動、安全的完成故障轉移。這些特性使得MongoDB能在一個相對不穩定(如雲主機)的環境中,保持高可用性。
數據量很大或者未來會變得很大
依賴數據庫(MySQL)自身的特性,完成數據的擴展是較困難的事,在MySQL中,當一個單達表到5-10GB時會出現明顯的性能降級,此時需要通過數據的水平和垂直拆分、庫的拆分完成擴展,使用MySQL通常需要借助驅動層或代理層完成這類需求。而MongoDB內建了多種數據分片的特性,可以很好的適應大數據量的需求。
基於位置的數據查詢
MongoDB支持二維空間索引,因此可以快速及精確的從指定位置獲取數據。
表結構不明確,且數據在不斷變大
在一些傳統RDBMS中,增加一個字段會鎖住整個數據庫/表,或者在執行一個重負載的請求時會明顯造成其它請求的性能降級。通常發生在數據表大於1G的時候(當大於1TB時更甚)。 因MongoDB是文檔型數據庫,為非結構貨的文檔增加一個新字段是很快速的操作,並且不會影響到已有數據。另外一個好處當業務數據發生變化時,是將不在需要由DBA修改表結構。
沒有DBA支持
如果沒有專職的DBA,並且準備不使用標準的關系型思想(結構化、連接等)來處理數據,那麽MongoDB將會是你的首選。MongoDB對於對像數據的存儲非常方便,類可以直接序列化成JSON存儲到MongoDB中。 但是需要先了解一些最佳實踐,避免當數據變大後,由於文檔設計問題而造成的性能缺陷。
BillRun – 基於MongoDB的帳單系統 (來自oc666)
BillRun是由Ofer Cohen推出開源賬單系統,采用MongoDB做為數據存儲。這套賬單系統被以色列一家增速最快的電信運營商采用,每月處理5億條通信記錄,Ofer在Slideshare上說明了具體利到了MongoDB的哪些特性:
弱數據結構的特點,使得BillRun能很快的支持新的CDR(通訊記錄)類型。這個特性使文檔型數據庫很適用於快速發展、業務需求不確定的系統中。
BillRun僅使用了一個Collection,已經管理了數TB的文檔數據,並且沒有遇到由結構變更、數據爆發式增長的帶來的限制和問題。
replicaSet副本集特性使建立更多的數據中心DRP變得更輕松。
內建的Sharding分片特性避免系統在數據增長的過程中遇到性能瓶頸。
每秒鐘2000條通信記錄的插入,MongoDB在架構設計上很好的支持了高負載的數據寫入。並且可以使用findAndModify(相對緩慢)完成基礎的事務特性,並且通過應用層面的支持,實現雙段式提交。
查詢方式相比SQL,更加易讀、易懂,開發相對輕松。
基於位置允許更好的分析用戶使用情況,從而更好地制定移動電話基礎設施的投入點。
對比MySQL,什麽場景MongoDB更適用