天天看點

MongoDB最佳實踐暢談-計費系統 MongoDB最佳實踐暢談-計費系統

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是一個偉大的資料庫,你必須把它使用在合适的場景才能保證你獲得市場競争的優勢。