1. 程式人生 > >對比MySQL,什麽場景MongoDB更適用

對比MySQL,什麽場景MongoDB更適用

時間 通過 易懂 開源 修改 支持 .net 方便 情況下

原文鏈接: 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更適用