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