MongoDB調研筆記

來源:互聯網
上載者:User
文章目錄
  •        部署和啟動
  •        主從備份
  •         冷備份
  •         開發協助工具輔助
  •        效能監控
  •        優缺點
  •        最後是NoSQL和RDBMS系統的查詢語言的對比

 http://blog.csdn.net/aegis1019/article/details/6902704

 

 

  公司出於成本上的考慮,打算把曆史資料從Oracle移植到一個開來源資料庫上,正好被分到了MongoDB的調研任務,既然寫完了調研報告,這裡也自己留一份簡單的總結備查吧。

       筆記而已,寫的有點亂。

       MongoDB是一個分布式文檔型資料庫,目前多大多用於web2.0項目上,可能不太適合我們目前的項目,大多用來輔助關係型資料庫進行儲存,當然也有單獨使用的情況,號稱在海量資料的處理上表現優異。但是實際測試表現並不理想,遠沒有達到Oracle的水平,效能接近MySQL。但是其注重可擴充性,關注點不同,各有各的優勢。

       MongoDB最著名的應用的宕機的例子就是4square的由於自動分區問題導致11小時宕機無法處理,直到10gen支援才解決。

       部署和啟動

        MongoDB服務端可運行在Linux、Windows或OS X平台,支援32位和64位應用,預設連接埠為27017。推薦運行在64位平台,因為MongoDB在32位元模式運行時支援的最大檔案尺寸為2GB。

        部署較容易,在MongoDB官網下載對應作業系統的可用版本,mongod.exe –dbpath=/opt/MongDB/data指定資料庫資料目錄,完成啟動。瀏覽器輸入http://localhost:27017/ 會出現連接埠設定的提示。

       主從備份

             有兩種模式,主從模式和互為主從。兩種模式都不一定需要兩台機器,可以在同一台機器上部署2個資料庫為主從。但是不建議這麼做,因為這樣容災考慮上不好。

        主從模式命令:master機 mongod --dbpath ./data/mongodb1 --master --logpath ./data/mongdb1.log --logappened

                                 slave機    mongod --dbpath ./data/mongodb2 --source 127.0.0.1:27017 --autoresync --slavedelay 30 --logpath ./data/mongodb2.log --port 27018 --logappend

         --autoresync可使從節點在不同步情況發生10秒鐘之後,自動重啟複製操作。如果指定了--autoresync參數,從節點在10分鐘以內自動重新同步資料的操作只會執行一次。

        互為主從模式,就在master機和slave機的命令上都加入 --master --slave,可以根據機器負載自動切換主從。

        冷備份

       資料冷備份可以通過MongoDB提供的 dump和restore工具來完成。

       命令文法:

       >mongodump -h dbhost -d dbname -o dbdirectory

       -h:MongDB所在伺服器位址,例如:127.0.0.1,當然也可以指定連接埠號碼:127.0.0.1:27017

       -d:需要備份的資料庫執行個體,例如:test

       -o:備份的資料存放位置,例如:/data/dump,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個test目錄,這個目錄裡面存放該資料庫執行個體的備份資料。

       >mongorestore -h dbhost -d dbname --directoryperdb dbdirectory

       -h:MongoDB所在伺服器位址

       -d:需要恢複的資料庫執行個體,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2

       --directoryperdb:備份資料所在位置,例如:/data/dump/test。

--drop:恢複的時候,先刪除當前資料,然後恢複備份的資料。就是說,恢複後,備份後添加修改的資料都會被刪除。

             分布式的測試沒做。

        開發協助工具輔助

        內建工具:和Oracle一樣,MongoDB也內建了一些輔助開發工具:mongo.exe,mongoexport.exe,mongoimport.exe,mongodump.exe,mongorestore.exe。其中mongo.exe對應Oracle的sqlPlus,mongoexport.exe和mongoimport.exe是資料匯入匯出工具,mongodump.exe和mongorestore.exe是Database Backup恢複工具。這些工具都是黑屏工具。

       現在還有一些第三方開發的MongoDB的開發協助工具輔助,這裡個人推薦一個國人自己寫的基於php的開發工具——rockmongo,可以在code.google上下載,MongoDB官網也有連結,介面類似於pl/sql develop。

       效能監控

            mongodb可以通過profile來監控資料,進行最佳化。查看當前是否開啟profile功能用命令:

       db.getProfilingLevel()  返回level等級,值為0|1|2,分別代表意思:0代表關閉,1代表記錄慢命令,2代表全部。

       開始profile功能為:

       db.setProfilingLevel(level);  #level等級,值同上。level為1的時候,慢命令預設值為100ms,更改為db.setProfilingLevel(level,slowms)如db.setProfilingLevel(1,50)這樣就更改為50毫秒。

       通過db.system.profile.find() 查看當前的監控日誌,參數分析:

      

       如果發現時間比較長,那麼就需要作最佳化。比如nscanned數很大,或者接近記錄總數,那麼可能沒有用到索引查詢。reslen很大,有可能返回沒必要的欄位。nreturned很大,那麼有可能查詢的時候沒有加限制。

這裡值的含義是:

        ts:命令執行時間

        info:命令的內容

               query:代表查詢

               order.order: 代表查詢的庫與集合

               reslen:返回的結果集大小,byte數

               nscanned:掃描記錄數量

               nquery:後面是查詢條件

               nreturned:返回記錄數及用時

               millis:所花時間

        通過db.serverStatus()查看mongod的運行狀態:

> db.serverStatus()

{

"host" : "baobao-laptop",#主機名稱

"version" : "1.8.2",#版本號碼

"process" : "mongod",#進程名

"uptime" : 15549,#已耗用時間

"uptimeEstimate" : 15351,

"localTime" : ISODate("2011-07-23T06:07:31.220Z"),目前時間

"globalLock" : {

"totalTime" : 15548525410,#總已耗用時間(ns)

"lockTime" : 89206633, #總的鎖時間(ns)

"ratio" : 0.005737305027178137,#鎖比值

"currentQueue" : {

"total" : 0,#當前需要執行的隊列

"readers" : 0,#讀隊列

"writers" : 0#寫隊列

},

"activeClients" : {

"total" : 0,#當前用戶端執行的連結數

"readers" : 0,#讀連結數

"writers" : 0#寫連結數

}

},

"mem" : {#記憶體情況

"bits" : 32,#32位系統

"resident" : 337,#佔有實體記憶體數

"virtual" : 599,#佔有虛擬記憶體

"supported" : true,#是否支援擴充記憶體

"mapped" : 512

},

"connections" : {

"current" : 2,#當前連結數

"available" : 817#可用連結數

},

"extra_info" : {

"note" : "fields vary by platform",

"heap_usage_bytes" : 159008,#堆使用方式位元組

"page_faults" : 907 #頁面故作

},

"indexCounters" : {

"btree" : {

"accesses" : 59963, #索引被訪問數

"hits" : 59963, #所以命中數

"misses" : 0,#索引偏差數

"resets" : 0,#複位元

"missRatio" : 0#未命中率

}

},

"backgroundFlushing" : {

"flushes" : 259, #重新整理次數

"total_ms" : 3395, #重新整理總花費時間長度

"average_ms" : 13.108108108108109, #平均時間長度

"last_ms" : 1, #最後一次時間長度

"last_finished" : ISODate("2011-07-23T06:07:22.725Z")#最後重新整理時間

},

"cursors" : {

"totalOpen" : 0,#開啟遊標數

"clientCursors_size" : 0,#用戶端資料指標大小

"timedOut" : 16#逾時時間

},

"network" : {

"bytesIn" : 285676177,#輸入資料(byte)

"bytesOut" : 286564,#輸出資料(byte)

"numRequests" : 2012348#請求數

},

"opcounters" : {

"insert" : 2010000, #插入運算元

"query" : 51,#查詢運算元

"update" : 5,#更新運算元

"delete" : 0,#刪除運算元

"getmore" : 0,#擷取更多的運算元

"command" : 148#其他命令運算元

},

"asserts" : {#各個斷言的數量

"regular" : 0,

"warning" : 0,

"msg" : 0,

"user" : 2131,

"rollovers" : 0

},

"writeBacksQueued" : false,

"ok" : 1

}

       優缺點

       優點:

       擁有較高的可配置型,可以最大程度的降低營運人員的壓力。容易使用和理解的api.不低的插入和查詢效能,同樣降低開發人員的壓力。document模型的資料存放區,並通過一些內部設計來避免表之間的join,可提供一個簡單方便的容易擴充的架構。而且確保無人誤用導致資料不可切分。MongoDB適合給人手不足的中小型團隊提供的一個處理海量資料的,高並發高可用性的資料化持久工具。開源免費,壓榨機器效能。

        缺點:

        首先,由於schema free和BSON 的引入使得資料膨脹明顯,一般膨脹5~10倍非常容易,因為每一個doc都會完整儲存所有的鍵和值,即使結構一樣的doc,所以隱藏檔會急劇增大,如果使用32位作業系統很容易達到單個檔案體積上限。所以對於MongoDB必須使用64位作業系統。第二,mmap(2)的使用使得讀寫調度控制以及cache控制不夠細,倒是方便了程式員寫程式的難度。但在資料量極大的超過記憶體的時候,僅憑OS的交換策略不能滿足實際需要,這個時候效能抖動劇烈。第三,不支援多表聯集查詢,不支援事務性操作。還有,安全性不高,需要作業系統為它分配記憶體,佔用和消耗巨大記憶體(這點不同的人有不同的說法,可能是叢集和開發環境造成的),讀寫鎖粒度太粗等。

       最後是NoSQL和RDBMS系統的查詢語言的對比

            

              需要注意的是,NoSQL不支援多表聯集查詢,只能查詢單表,幾乎可以達到SQL的同樣水平。

 

mongodb的vs2005驅動,只能上傳.jpg檔案,rar你懂得

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.