MongoDB最佳實務暢談-計費系統
作者:chszs,轉載需註明。部落客頁:http://blog.csdn.net/chszs
MongoDB的最佳實務,在以下情況,你應該使用MongoDB。
1)高寫負載的情境
MongoDB預設更適合高寫入而不是事務安全。如果你需要為每個用戶端載入巨量的、低價值的資料,那麼MongoDB很適合。假如你需要載入上百萬的交易記錄,那麼這需要額外的安全措施,MongoDB不適合。
2)在不可靠的環境需要高可用情境
設定複製集(伺服器做主從叢集)很容易,速度也很快。此外,從某個節點(或資料中心)做故障恢複是即時的、安全的、自動的。
3)資料增長巨大,能把資料分區的情境
資料庫做伸縮是很困難的(單個MySQL表在資料量達到5GB~10GB時,它的效能會顯著下降)。如果你需要對資料庫進行分區和分區,MongoDB內建了這些機制,完成這些工作很簡單。
4)資料是基於位置的情境
MongoDB內建了支援空間的功能,因此從指定的位置尋找相關的資料是非常快速和準確的。
5)資料集很大(從1GB起步)以及資料的模式是不穩定的情境
在一些關聯式資料庫中要增加新的欄欄位,資料庫會鎖定整個表,或者或讓主要資料庫伺服器的負載和效能下降。通常,當資料表的尺寸超過1GB後,這種情況效能下降的更厲害。而MongoDB是無模式的,增加新的欄位,對已有的行(稱為文檔)無影響。其次是當應用程式改變後,MongoDB不需要DBA來修改資料模式。
6)無DBA的情境
如果你的公司沒有專職的DBA,你也不需要對資料做聯合或標準化,那麼你可以考慮MongoDB。MongoDB在持久化方面做到很好,類資料可以被序列化成JSON資料,並加以儲存。
注意:請遵循MongoDB的最佳實務,以避免一些陷阱。
真實案例:計費
國外的奧弗•科恩發布了一個號稱下一代的開源計費解決方案,此方案利用MongoDB作為其後端儲存。此計費系統已經運行於以色列發展最快的行動電信業者的產品環境,每個月能處理超過500M的呼叫資料記錄CDR。奧弗•科恩介紹了它是怎樣利用MongoDB的優勢的:
1)無模式的設計
無模式設計可以快速添加新呼叫資料記錄類型到系統中。它讓BillRun保持資料存放區的通用性。
2)可伸縮
BillRun的產品網站目前已經在單個資料表中管理了幾個TB的資料,w/o可通過添加新欄位進行限制。
3)快速的複製集
複製集能夠滿足易於構建多資料中心DRP和高可用HA解決方案的規則。
4)分區
分區使的線性擴容很清晰可控,不至於出現超出預算的情況。
5)每秒插入的呼叫資料記錄CDR的數量超過2,000次,MongoDB的架構非常適合高寫入情境。你還可以保證帶findAndModify(通常比較慢)和兩階段交易認可的事務的處理。
6)開發人員可以面向查詢,使得能夠寫出優雅的查詢。
7)基於位置
基於位置可用於分析使用者的使用方式,以此決定在何處繼續建設蜂窩基礎設施。
最後,MongoDB是一個偉大的資料庫,你必須把它使用在合適的情境才能保證你獲得市場競爭的優勢。