天天看點

MongoDB 使用記錄

一、為什麼使用mangodb

1、Highperformance - 對資料庫高并發讀寫的需求

web2.0網站要根據使用者個性化資訊來實時生成動态頁面和提供動态資訊,是以基本上無法使用動态頁面靜态化技術,是以資料庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系資料庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫資料請求,硬碟IO就已經無法承受了。其實對于普通的BBS網站,往往也存在對高并發寫請求的需求。

2、HugeStorage - 對海量資料的高效率存儲和通路的需求

對于大型的SNS網站,每天使用者産生海量的使用者動态,以國外的Friendfeed為例,一個月就達到了2.5億條使用者動态,對于關系資料庫來說,在一張2.5億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的使用者登入系統,

3、HighScalability && High Availability- 對資料庫的高可擴充性和高可用性的需求

4、MongoDB是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支援的資料結構非常松散,是類似json的bjson格式,是以可以存儲比較複雜的資料類型。Mongo最大的特點是他支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。它的特點是高性能、易部署、易使用,存儲資料非常友善。

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

二、安裝使用

http://dl.mongodb.org/dl/win32/i386  下載下傳安裝

http://www.mongovue.com/downloads/ mangodb用戶端

輸入指令E:\projectTest\MangoDB\mongodb-win32-i386-2.5.0\bin\mongod.exe 進行安裝,如下圖

再設定db位置,指令為E:\projectTest\MangoDB\mongodb-win32-i386-2.5.0\bin\mongod.exe-dbpath E:\projectTest\MangoDB\myDB  (檔案夾路徑需提前建立)

檢視安裝情況,指令為E:\projectTest\MangoDB\mongodb-win32-i386-2.5.0\bin\mongod.exe -dbpathE:\projectTest\MangoDB\myDB

三、注意事項

1、MongoDB分成32位版本和64位版本,由于MongoDB使用記憶體映射檔案,是以32位版本隻能存儲2GB左右的資料。建議存儲更多資料的使用者使用64位版本。

2、MongoDB是文檔型資料庫,資料以BSON形式存儲在文檔中。最新版本的MongoDB能夠支援最大16 MB的文檔大小。建議使用者盡量不要存儲大型對象,将文檔控制在16 MB以内。

3、MongoDB的寫入和更新速度非常快,是以錯誤提示并不明确。要確定寫入正确,建議使用者使用getLastError或者使用安全寫入。

4、關系型資料庫往往會有預定義的schema,你想添加額外的列就需要在整個表上添加。MongoDB沒有這個限制,這使得開發和管理變得更簡單。但這并不意味着你就可以完全忽視MongoDB的schema設計,一個設計良好的schema能夠讓MongoDB的性能達到最佳。

5、MongoDB的更新在預設情況下會使用類似于傳統資料庫的LIMIT語句,即LIMIT 1。是以更新不會影響到所有的文檔,如果你想要一次更新許多文檔,那麼請把multi設為true。

6、MongoDB預設情況下是區分大小寫的,例如db.people.find({name:'Russell'}) 和db.people.find({name:'russell'})就是不一樣的。是以使用者需要知道MongoDB的大小寫限制。

7、傳統資料庫中,如果插入錯誤的資料類型,通常會提示錯誤或者強制轉換成預定義的資料值。MongoDB中沒有這種限制,是以輸入錯誤資料類型不會出現提示。建議使用者確定輸入正确的資料類型。

8、全局鎖是一直被MongoDB使用者诟病的特性,MongoDB2.2中增加了資料庫級鎖,這是一個很大的改進。建議使用者使用穩定版的MongoDB2.2資料庫,避免全局鎖限制。

9、過期版本MongoDB使用者在下載下傳程式包時會出問題,建議使用者使用10gen最新版本的官方程式包。

10、Replica Set是MongoDB中受關注最多的功能,它能為MongoDB叢集增加備援并提供良好的讀性能。但由于ReplicaSet的選舉機制,必須保證ReplicaSet成員數目為奇數。如果是偶數的話,主節點當機就會導緻其他節點變為隻讀。解決方法也可以使用一個仲裁節點(arbiter),它也是一個Replica Set的成員,但并不存儲使用者資料。是以請記住設定ReplicaSet成員時要定為奇數。

11、MongoDB中不存在join,你要針對多個集合進行資料檢索的時候,必須使用多個查詢。是以當你遇到這個問題時,可以考慮重新設計MongoDB的schema。

12、Journaling日志是MongoDB中非常好的功能,能夠增強節點的可用性。在2.0版本之後,MongoDB預設是開啟Journaling日志功能的。雖然Journaling日志會對資料庫性能造成一定的影響,但這部分影響是可以忽略的。是以建議使用者開啟Journaling功能,特别是對于可用性要求較高的使用者。

13、MongoDB預設情況下是沒有認證功能的,是以建議使用者使用防火牆對MongoDB進行保護。

14、Replica Set的工作是通過傳送oplog來完成的,主節點發生故障後,新的資料将會存放在資料目錄下的一個特定檔案夾内,即rollback檔案夾。你可以用來手動完成資料恢複。是以在每次故障發生之後,你一定要看看這個檔案夾,MongoDB自帶的工具就能夠幫助你輕松地完成手動資料恢複。

15、跨伺服器的資料拆分中,Sharding是一個有效的方法。MongoDB中支援自動化Sharding,但是對資料庫性能會造成很大影響。是以建議使用者盡早進行Sharding,使用MMS、Munin (+ Mongo plugin)和CloudWatch等工具對MongoDB進行監控,確定系統資源使用達到80%之前就完成Sharding工作。

16、MongoDB使用shard key來決定特定的文檔在哪個分片上,當插入一個文檔之後,你是無法更新shardkey的。這裡建議使用者删除文檔并重新插入,這樣就能夠将其配置設定到合适的分片上。

17、MongoDB對分片的限制還包括集合的大小,當超過256 GB的時候,MongoDB将不允許進行分片。相信10gen公司會在未來放棄這一限制,但在此之前使用者需要留意。

18、MongoDB中跨分片并沒有強制要求唯一性,MongoDB隻針對獨立的分片進行強制而非全局性。當然除shardkey之外。

19、進行拆分的時候,MongoDB會要求你選擇一個鍵。使用者需要注意選擇正确的鍵,否則會造成不必要的麻煩。如何進行選擇并無定式,主要取決于你的應用,比如針對newsfeed使用時間戳就是錯的。在下一版本中,MongoDB将對此進行改進。

20、MongoDB連接配接預設情況下是不加密的,也就是說你的資料是能夠被第三方記錄和使用的。是以你在公共網中通路MongoDB的話,就一定要進行加密。

21、MongoDB隻支援單一文檔的原子性,這一點與傳統的資料庫有所不同,如MySQL。是以MongoDB中跨多個文檔是不提供内置的transaction支援的。

22、當MongoDB顯示ready的時候,其實内部還在進行journal的配置。是以針對速度較慢的檔案系統,MongoDB的journal配置也會很慢。

23、不建議嘗試NUMA + Linux + MongoDB的組合,如果你的MongoDB跑在NUMA伺服器上,建議将它關掉。

24、在Linux上運作MongoDB遭遇segfault錯誤時,這主要是因為openfiles / process限制過低。建議使用者将限制設定為4K+。

     本文轉自aaron428 51CTO部落格,原文連結:http://blog.51cto.com/aaronsa/1741511,如需轉載請自行聯系原作者

上一篇: 增加産品