MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品, 是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。 Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持 對數(shù)據(jù)建立索引。
之所以喜歡MongoDB,主要是因為在動態(tài)語言中使用它是如此的簡單,自然。到目前為止,我已經(jīng)在兩個項目(Encode 和 Sparrw)中使用過它了,雖然對這個選擇我非常滿意,但是有些問題我還是沒有注意到,這些問題讓我抓了好幾個小時的頭皮才解決。如果你有多臺機器,然后為數(shù)據(jù)庫多分配幾臺機器,那么有些問題可以迎刃而解,但是我的項目是運行在單個(虛擬)服務(wù)器之上的低流量Web應(yīng)用程序。
MongoDB服務(wù)端可運行在Linux、Windows或OS X平臺,支持32位和64位應(yīng)用,默認(rèn)端口為27017。推薦運行在64位平臺,因為MongoDB
在32位模式運行時支持的最大文件尺寸為2GB。
MongoDB把數(shù)據(jù)存儲在文件中(默認(rèn)路徑為:/data/db),為提高效率使用內(nèi)存映射文件進行管理。
安裝配置:
MongoDB默認(rèn)的數(shù)據(jù)目錄為:C:\data\db。如果不用默認(rèn)目錄,則需要在在mongod.exe命令后加--dbpath參數(shù)。
創(chuàng)建數(shù)據(jù)目錄。我創(chuàng)建的是D:\dev\mongodb-win32-x86_64-2.4.5\data\db
創(chuàng)建日志目錄及其文件。我創(chuàng)建的是D:\dev\mongodb-win32-x86_64-2.4.5\log及D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt。
1、啟動MongoDB
打開cmd窗口(cmd.exe),進入D:\dev\mongodb-win32-x86_64-2.4.5\bin,執(zhí)行mongod.exe命令,見下圖。
mongod.exe --logpath=D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt --dbpath=D:\dev\mongodb-win32-x86_64-2.4.5\data\db!
--logpath 參數(shù)是設(shè)定日志文件的路徑。
--dbpath 參數(shù)是設(shè)定數(shù)據(jù)庫文件的存放路徑。
mongod.exe命令的所有參數(shù)選項可通過mongod.exe --help查看。
2、作為服務(wù)進行安裝
使用管理員權(quán)限打開windows的cmd窗口,進入D:\dev\mongodb-win32-x86_64-2.4.5\bin目錄。
mongod.exe --install --logpath=D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt --dbpath=D:\dev\mongodb-win32-x86_64-2.4.5\data\db
--install 參數(shù)是設(shè)定安裝為服務(wù)器!
設(shè)置為服務(wù)后,即可在cmd(管理員權(quán)限打開的windows cmd窗口)窗口用服務(wù)的方式啟動或停止MongoDB。
net start mongodb 啟動mongodb服務(wù)
net stop mongodb 啟動mongodb服務(wù)
3、進入shell環(huán)境界面
進入sheelMongoDB后,在cmd窗口進入D:\dev\mongodb-win32-x86_64-2.4.5\bin目錄,輸入mongo.exe,則可以進入shell環(huán)境界面。
主要功能:
面向集合存儲,易存儲對象類型的數(shù)據(jù)。
模式自由。
支持動態(tài)查詢。
支持完全索引,包含內(nèi)部對象。
支持查詢。
支持復(fù)制和故障恢復(fù)。
使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等)。
自動處理碎片,以支持云計算層次的擴展性
支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
文件存儲格式為BSON(一種JSON的擴展)
可通過網(wǎng)絡(luò)訪問
更新日志:
MongoDB 2.6 已經(jīng)在今天發(fā)布,當(dāng)然,關(guān)注MongoDB的同志自然知道這個消息。
整個MongoDB2.6,個人覺得認(rèn)證系統(tǒng)是一個重新設(shè)計的系統(tǒng)。當(dāng)然,MongoDB 2.4.6開始,就已經(jīng)在嘗試新的基于Role的認(rèn)證方式了,但是真正的成熟還是在2.6.0這個版本。
TextSearch全文檢索
這個功能在 2.4.6里面就有的功能,這次的變化是,將這個TextSearch的放入了Aggerate里面了。
換句話說,原來的全文檢索的結(jié)果是孤立的,現(xiàn)在可以作為聚合檢索的一個部分了,文本檢索的結(jié)果可以作為其他聚合操作的輸入數(shù)據(jù)。
作為MongoDB5年里程碑的這個版本,還有其他很多對以往功能的增強。
作為一個長期觀察MongoDB的人來說,我個人認(rèn)為,現(xiàn)在是大家可以嘗試MongoDB的一個時間點了。
2.6.0以前的版本的確有很多詬病,除了前面說過的讀寫的安全之外,還有很多設(shè)計上的問題。
經(jīng)過2.4的很多演化后,很多東西都定型了:
主從(Master-Slaver)模型 被 Replication模型代替
加入基于Role的認(rèn)證后,可以自定義角色(當(dāng)然,系統(tǒng)也有一些內(nèi)置的角色)
全文檢索(很遺憾,不支持中文)的強化 具有特色的 地理聚合(很多處理地理坐標(biāo)的內(nèi)置函數(shù))
TLL數(shù)據(jù)集(數(shù)據(jù)集里面的記錄會慢慢自動刪除掉,有點緩存的意思)Capped數(shù)據(jù)集(固定大小的數(shù)據(jù)集,在存儲和讀寫上提高效率,犧牲靈活性)
Sharding支持了ShardKey
索引的內(nèi)容豐富了不少,特別是有了text屬性的索引,對于全文檢索的幫助很大
MongoDB的2.4已經(jīng)發(fā)布,其中包括新的功能,如文本搜索,基于散列的分片。
主要功能和增強功能:
基于散列分片
Capped 陣列
文本搜索(測試版)
地理空間增強
更快的計數(shù)
聚合框架的改進
基于角色的權(quán)限
工作集分析器
改進復(fù)制
什么是基于角色Role的認(rèn)證系統(tǒng)?
在以往的MongoDB中,官方一直推薦MongoDB應(yīng)該在一個Trust的環(huán)境下運行,對于認(rèn)證和安全性上的考慮是不充分的。
(MongoDB的安全性和讀寫的完整性以前一直被人詬病,WriteConcern解決了寫數(shù)據(jù)的安全性,這次的RoleBase的認(rèn)證機制,在一定程度上提高了MongoDB的安全性)
現(xiàn)在在MongoDB中創(chuàng)建的User,除了有用戶名,密碼等傳統(tǒng)屬性之外,還有一個Role的概念。
每個Role的操作權(quán)限是不同的,而且,根據(jù)細化的配置,可以將每個Role的權(quán)限定義的非常詳細,
Role可以查詢,修改某個數(shù)據(jù)庫,某個數(shù)據(jù)表,都可以做到小粒度的定義。
每個用戶可以同時擁有多個Role,這樣的話,管理員可以對于各個用戶的權(quán)限做到非常精確的控制了。
MongoDB的 具體實現(xiàn) Role:
每個Role可以有多個Privilege,每個Privilege指定了可以訪問的資源(可以指定數(shù)據(jù)集,數(shù)據(jù)庫,精確到具體的某個數(shù)據(jù)集)
對于資源的可以執(zhí)行的操作(Action),例如 數(shù)據(jù)集的查找 或者 更新。對于各種的操作已經(jīng)做到非常小的粒度的細化了。
例如 添加用戶 和 刪除用戶 已經(jīng)是兩個操作了(Action),而不是通常理解的,增刪改是同樣的操作。
(當(dāng)然,可能也有人認(rèn)為如此細化對于管理者來說也是一種負擔(dān)。不過一個Role一旦精心設(shè)計之后,就可以分配給不同用戶,一勞永逸了)