1. 程式人生 > >對比MySQL,你究竟在什麼時候更需要MongoDB

對比MySQL,你究竟在什麼時候更需要MongoDB

【編者按】隨著資料的爆發性增長,NoSQL得到的關注已越來越多,然而你的用例真正需要使用NoSQL資料庫嗎?又真的適合使用NoSQL嗎?近日,Bright Aqua研發副總裁Moshe Kaplan以BillRun系統為例,分析了MongoDB的優勢和使用場景: 

以下為譯文: 

NoSQL已經流行了很長一段時間,那麼究竟是什麼場景下你才更需要用到這些“新興事物”,就比如MongoDB?下面是一些總結:


你期望一個更高的寫負載

預設情況下,對比事務安全,MongoDB更關注高的插入速度。如果你需要載入大量低價值的業務資料,那麼MongoDB將很適合你的用例。但是必須避免在要求高事務安全的情景下使用MongoDB,比如一個1000萬美元的交易。

不可靠環境保證高可用性

設定副本集(主-從伺服器設定)不僅方便而且很快,此外,使用MongoDB還可以快速、安全及自動化的實現節點(或資料中心)故障轉移。

未來會有一個很大的規模

資料庫擴充套件是非常有挑戰性的,當單表格大小達到5-10GB時,MySQL表格效能會毫無疑問的降低。如果你需要分片並且分割你的資料庫,MongoDB將很容易實現這一點。

使用基於位置的資料查詢

MongoDB支援二維空間索引,因此可以快速及精確的從指定位置獲取資料。

非結構化資料的爆發增長

給RDBMS增加列在有些情況下可能鎖定整個資料庫,或者增加負載從而導致效能下降,這個問題通常發生在表格大於1GB(更是下文提到BillRun系統中的痛點——單表格動輒幾GB)的情況下。鑑於MongoDB的弱資料結構模式,新增1個新欄位不會對舊錶格有任何影響,整個過程會非常快速;因此,在應用程式發生改變時,你不需要專門的1個DBA去修改資料庫模式。

缺少專業的資料庫管理員

如果你沒有專業的DBA,同時你也不需要結構化你的資料及做join查詢,MongoDB將會是你的首選。MongoDB非常適合類的持久化,類可以被序列化成JSON並儲存在MongoDB。需要注意的是,如果期望獲得一個更大的規模,你必須要了解一些最佳實踐來避免走入誤區。

現實用例學習:賬單

在上一次的ILMUG上,Ofer Cohen提出了BillRun,一個下一代基於MongoDB的開源賬單解決方案。這個賬單系統已被增速最快的以色列行動電話運營商採用,每月處理超過5億的CDR(通訊記錄),Ofer分享了該系統如何利用MongoDB的優勢:

  • 弱資料結構模式允許系統快速引入新的CDR型別,BillRun負責託管所有的資料。
  • BillRun系統已經管理了TB級的表格,I/O效能受限於新欄位的增加及資料體積的增長。
  • 快速副本集允許更簡單地設定多資料中心DRP和HA方案。
  • 分片允許I/O超預算時的線性橫向擴充套件。
  • 在CDR插入達到2000個每秒時,MongoDB非常適用於高寫入系統。同時,你完全可以使用findAndModify(會影響效能)以及2階段提交(應用程式級別)來解決事務問題。
  • 面向開發者的查詢允許優雅查詢的編寫。
  • 基於位置允許更好的分析使用者使用情況,從而更好地制定行動電話基礎設施的投入點。

總結

MongoDB是個非常不錯的工具,但是隻有在適合的場景下才能爆發出壓倒性優勢,BillRun就是一個不錯的用例。