MongoDB選型及注意問題點

    NoSQL和RDMS的爭論,一直都是沸沸揚揚,可是站在我們普通的企業應用角度,應該注意些什麼呢?本文將針對該問題進行討論。

    1、傳統的RDMS在大型的系統應用中,經常成爲系統瓶頸。應運而生的NoSQL,很大程度的彌補了RDMS的弊端,無形中給我們帶來了更多的希望。作爲技術選型的決策者,必須有一個清醒的認識:明確系統的應用場景,清楚需求;辯證的看待RDMS和NoSQL的關係,充分發揮各自優勢,最大限度的爲系統服務。

 

    2、本節不過多的介紹RDMS,針對最爲流行的NoSQL--MongoDB,介紹其使用場景

    2.1、Web應用程序。文檔能表示豐富的數據結構,建模相同數據庫所需的集合數量通常會比使用完全正規化關係型數據庫的數據表數量要少。動態查詢和二級索引能讓你輕鬆的實現SQL開發者所熟悉的大多數查詢。作爲一個成長中的Web應用程序,MongoDB提供了清晰的擴展路線。

    2.2、敏捷開發。MongoDB沒有固定的Schema,所有花在提交、溝通和實施Schema變更的時間都生下來了。

    2.3、分析和日誌。MongoDB的目標原子更新和固定集合。

    2.4、緩存

    2.5、可變Schema

 

    3、MongoDB存在的弊端及侷限性

    3.1、MongoDB應該運行於64位機器上。32爲系統只能對4GB內存做尋址。

    3.2、數據佔用的內存會自動按需分配。這樣一來在共享環境中運行數據庫會變得更加麻煩。所以最好能讓MongoDB運行在一臺專門的服務器上。

    3.3、運行帶複製功能的MongoDB是十分重要的,尤其是沒有開啓Journaling日誌的時候。

 

    4、MongoDB的最佳實踐

    4.1、總是使用Replica Sets。Replica Sets通過自動failover機制提供MongoDB的高可用性。在應用中,如primary機器出現故障,那麼某一臺secondary機器就會通過選舉成爲新的primary,整個集羣仍然能夠提供正常服務。如果在開發者自己的環境中同步機制的代價過高,建議其使用一些雲存儲服務。

    4.2、保持版本更新。保持版本更新很重要,10gen在每個版本中都會修復一些問題,使MongoDB的運行更出色。比如在2.0.x版本中,MongoDB的存儲性能和併發性能就有極大提高,同時還包括索引優化、Bug修復以及compaction命令等一系列改進,以便開發者更方便地擴展其集羣。

    4.3、不要在32位系統上使用MongoDB。在32位機器上,MongoDB只能存儲約2.5GB的數據。因爲MongoDB在內部實現上是通過內存映射的方式來提高性能的,所以在32位機器上其內存地址本身就限制了數據容量。在Engine Yard雲服務中使用MongoDB,請使用Large instance來部署MongoDB。在實際產品中,官方也只支持64位的MongoDB。

    4.4、默認開啓journaling日誌。MongoDB支持在寫操作前記錄journaling日誌來提高節點的可用性。強烈建議在部署時開啓journaling日誌。注意數據文件的存放位置。在使用時,請確認你的數據文件處於一個持久化存儲中(比如/data/mongodb目錄)。也可以使用非持久化的設備進行數據文件存儲,不過你最好小心再小心,因爲這可能會對你的集羣架構造成影響。推薦使用EBS進行MongoDB的數據文件存儲。熱數據最好能放在內存中。能夠保持熱數據(以及索引數據)一直放在內存中,這一點非常重要,它將對整個集羣的性能造成影響。如果通過監控發現page fault的數量增加,那麼很可能就是熱數據量超出了可用內存大小。當熱數據量超出了可用內存量時,通常有兩種解決方法:增加內存和數據分片。建議先增加內存,再考慮通過數據分片的方式解決。

    4.5、壓力過大升級配置。如果機器負載達到65%,那麼應該考慮升級機器配置。在日常使用中,最好保持負載低於65%。同時這也對數據恢復和縱向擴展有影響。當需要升級配置時,AWS建議按下面的順序來做:Large、Extra Large、High Memory 4XL。而在更高配置的機器上,網絡延遲也會更小。

    4.6、分片需謹慎。分片策略會受數據訪問特點的影響,所以在進行數據分片前,最好先理清楚數據的訪問特點,並想明白是否確實需要分片。分片字段對性能的影響非常大,所以選擇一個好的分片字段是非常重要的。Config節點對整個集羣的健康運行是至關重要的,所以一旦你選擇使用分片機制,就一定要保證有3個Config節點。永遠不要刪除Config節點的數據,要確保頻繁地對這些數據進行日常備份。如果可能,通過域名來指定節點的地址,比如在/etc/hosts文件中指定相應的本地域名,這能讓你在集羣配置上更靈活。Config節點的壓力很小,但還需運行在64位機器上。千萬不要把3個Config節點都放在同一臺機器上!

    4.7、使用Mongo MMS圖形化監控服務。如果你還沒有完善的MongoDB監控,可以嘗試Mongo MMS。Mongo MMS是10gen官方發佈的一個監控服務,可以將集羣的各項健康指標以圖形化的方式彙總展示。

 

    5、MongoDB都有哪些企業在使用

    5.1、官網上列出了很多國外的企業,MongoDB的使用場景和用戶頗爲廣泛,包括SAP、EA、迪士尼、ebay、Facebook等。

    5.2、在國內,MongoDB不僅在淘寶、大衆點評等互聯網業務中使用,還在一些國內銀行和汽車造業中使用。

 

    6、MongoDB支持的數據結構

    6.1、MongoDB存儲的數據結構類型爲BSON,是JSon的一個豐富數據類型的擴展,採用二進制編碼存儲

    6.2、MongoDB支持數據類型

    * string
    * integer
    * double
    * date
    * byte array (binary data)
    * boolean (true and false)
    * null
    * BSON object

    7、豐富的官方支持及方便管理的可視化客戶端

    7.1、官方地址:http://www.mongodb.org

    7.2、可視化客戶端官方地址:http://www.mongovue.com

    7.3、可視化客戶端的破解方法:刪除註冊表中:[HKEY_CURRENT_USER\Software\Classes\CLSID\{B1159E65-821C3-21C5-CE21-34A484D54444}\4FF78130]下所有的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章