一.MongoDB簡介
什么是MongoDB ?
MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。
在高負載的情況下,添加更多的節點,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=》value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
主要特點
MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易。
你可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)來實現更快的排序。
你可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網絡中的其他節點上這就是所謂的分片。
Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
Map函數和Reduce函數是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
GridFS是MongoDB中的一個內置功能,可以用于存放大量小文件。
MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
MongoDB安裝簡單。
MongoDB 下載
你可以在mongodb官網下載該安裝包,地址為: http://www.mongodb.org/downloads。MonggoDB支持以下平臺:
OS X 32-bit
OS X 64-bit
Linux 32-bit
Linux 64-bit
Windows 32-bit
Windows 64-bit
Solaris i86pc
Solaris 64
MongoDB 工具
有幾種可用于MongoDB的管理工具。
監控
MongoDB提供了網絡和系統監控工具Munin,它作為一個插件應用于MongoDB中。
Gangila是MongoDB高性能的系統監視的工具,它作為一個插件應用于MongoDB中。
基于圖形界面的開源工具 Cacti, 用于查看CPU負載, 網絡帶寬利用率,它也提供了一個應用于監控 MongoDB 的插件。
GUI
Fang of Mongo – 網頁式,由Django和jQuery所構成。
Futon4Mongo – 一個CouchDB Futon web的mongodb山寨版。
Mongo3 – Ruby寫成。
MongoHub – 適用于OSX的應用程序。
Opricot – 一個基于瀏覽器的MongoDB控制臺, 由PHP撰寫而成。
Database Master — Windows的mongodb管理工具
RockMongo — 最好的PHP語言的MongoDB管理工具,輕量級, 支持多國語言。
MongoDB 應用案例
下面列舉一些公司MongoDB的實際應用:
Craiglist上使用MongoDB的存檔數十億條記錄。
FourSquare,基于位置的社交網站,在Amazon EC2的服務器上使用MongoDB分享數據。
Shutterfly,以互聯網為基礎的社會和個人出版服務,使用MongoDB的各種持久性數據存儲的要求。
bit.ly, 一個基于Web的網址縮短服務,使用MongoDB的存儲自己的數據。
spike.com,一個MTV網絡的聯營公司, spike.com使用MongoDB的。
Intuit公司,一個為小企業和個人的軟件和服務提供商,為小型企業使用MongoDB的跟蹤用戶的數據。
sourceforge.net,資源網站查找,創建和發布開源軟件免費,使用MongoDB的后端存儲。
etsy.com ,一個購買和出售手工制作物品網站,使用MongoDB。
紐約時報,領先的在線新聞門戶網站之一,使用MongoDB。
CERN,著名的粒子物理研究所,歐洲核子研究中心大型強子對撞機的數據使用MongoDB。
http://www.runoob.com/mongodb/mongodb-intro.html
二、MongoDB和MySQL比較
MongoDB本身它還算比較年輕的一個產品,所以它的問題,就是成熟度肯定沒有傳統MySQL那么成熟穩定。所以在使用的時候,
第一,盡量使用穩定版,不要在線上使用開發版,這是一個大原則;
另外一點,備份很重要,MongoDB如果出現一些異常情況,備份一定是要能跟上。除了通過傳統的復制的方式來做備份,離線備份也還是要有,不管你是用什么方式,都要有一個完整的離線備份。往往最后出現了特殊情況,它能幫助到你;
另外,MongoDB性能的一個關鍵點就是索引,索引是不是能有比較好的使用效率,索引是不是能夠放在內存中,這樣能夠提升隨機讀寫的性能。如果你的索引不能完全放在內存中,一旦出現隨機讀寫比較高的時候,它就會頻繁地進行磁盤交換,這個時候,MongoDB的性能就會急劇下降,會出現波動。
另外,MongoDB還有一個最大的缺點,就是它占用的空間很大,因為它屬于典型空間換時間原則的類型。那么它的磁盤空間比普通數據庫會浪費一些,而且到目前為止它還沒有實現在線壓縮功能,在MongoDB中頻繁的進行數據增刪改時,如果記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引發的結果,一個是索引會出現性能問題,
另外一個就是在一定的時間后,所占空間會莫明其妙地增大,所以要定期把數據庫做修復,定期重新做索引,這樣會提升MongoDB的穩定性和效率。在最新的版本里,它已經在實現在線壓縮,估計應該在2.0版左右,應該能夠實現在線壓縮,可以在后臺執行現在repair DataBase的一些操作。如果那樣,就解決了目前困擾我們的大問題。

三、問題
用戶數據庫是用mongodb好,還是用mysql好?修改
打算給一系列產品統一賬戶,程序用的是nodejs寫的,用戶數據庫大概就是記錄用戶名、密碼、電子郵箱還有一些會高并發頻繁變更的信息,這種數據庫要用mongodb還是mysql?或者有更好的推薦嗎?
答案:
a1: mysql更通用 如果不知道選什么就選mysql錯不了。 而mongodb的存在更多的是對于mysql的一個細分需求領域中的補充。
比如在游戲行業中 使用json格式的mongodb基本上可以滿足所有數據結構的存儲, 而且你再也不必因為擴充一個小功能而糾結新建一個表來存儲 還是新建一個字段并用字符串來存儲(每次讀/寫都要解析/序列化成字符串存儲), mysql是不是特別傻笨粗, 而游戲基本上前面搭好框子后面寫業務的時候 一直都是在做這些東西。
但正如我上面說的 mongodb只是一個細分需求領域的補充, 很多東西他做不了也做不好 假如你的程序哪怕有1%的功能在這里 這都容易悲劇。
另外說一下題主問題中提供的需求看法。
看上去是統一認證系統或者認證平臺之類的需求。
一般有以下特點。
1. 數據結構簡單。 所以用mysql還是mongodb在這里都一樣。
2. 可能對讀性能有要求 但寫速度關系不大, 一般都是大量已注冊用戶登錄。 因此mysql一定要配合redis或者memcache, 這樣的話 mongodb稍微勝出一點, mongodb本身的讀速度有優化, 很可觀。
3. 數據結構中含有一些特殊數據 比如玩家的充值信息。 mysql明顯比mongodb好的太多。
4. 日志統計, mysql的存儲過程可以很方便的做很多統計工作, mongodb的話就要委屈后臺小哥多寫點代碼來做統計了(實際上因為數據簡單 可能也就幾行代碼)。
因此呢 根據上面幾點來說, 用mongodb的意義不大, 但具體題主的需求, 自己根據上面我列舉的幾條可以自己再度量一下.
電子發燒友App
























評論