關(guān)于我們
書單推薦
新書推薦
|
MongoDB游記之輕松入門到進(jìn)階
本書共分四個(gè)部分, 第一部分理論部分講解MongoDB的相關(guān)概念和原理以及內(nèi)部工作機(jī)制, 讓讀者對(duì)MongoDB有一個(gè)全面的認(rèn)識(shí)。第二部分入門部分和第三部分進(jìn)階部分從應(yīng)用角度, 結(jié)合實(shí)例講解MongoDB的安裝、配置、部署、開發(fā)、集群部署和管理等在實(shí)際工作中會(huì)用到的技能。最后部分是經(jīng)驗(yàn)部分, 這是作者多年使用MongoDB后總結(jié)的技巧, 對(duì)讀者在工作中使用MongoDB有極大的參考價(jià)值。
全面講解MongoDB的相關(guān)知識(shí),使讀者對(duì)MongoDB有全面的認(rèn)識(shí)
以*直接、*細(xì)致的方式指導(dǎo)讀者輕松掌握MongoDB的安裝、部署與使用
以實(shí)際工作框架為例子進(jìn)行講解,使讀者真正能勝任MongoDB的開發(fā)管理工作
由淺入深,層層遞進(jìn),路線清晰
我思考了很長(zhǎng)時(shí)間,到底要寫一本什么樣的書,才能讓讀者輕松、全面地認(rèn)識(shí)MongoDB。
從2012年有幸開始接觸MongoDB并在實(shí)際工作環(huán)境中使用它,不知不覺已經(jīng)過(guò)了5年多的時(shí)間。在這5年中,大數(shù)據(jù)興起,NoSQL來(lái)勢(shì)洶洶。
“有MongoDB使用經(jīng)驗(yàn)優(yōu)先”“精通MongoDB等NoSQL數(shù)據(jù)庫(kù)”這樣的要求也漸漸出現(xiàn)在招聘要求中。MongoDB作為NoSQL數(shù)據(jù)庫(kù)的典型代表,越來(lái)越多的公司在使用它。
在開始學(xué)習(xí)使用MongoDB的過(guò)程中,因?yàn)橄嚓P(guān)書籍資料太少,一路走來(lái)確實(shí)算是翻山越嶺,跋山涉水。這也是本書名的由來(lái)。
本書定位
關(guān)于本書的定位,在我的想象中應(yīng)該有如下幾點(diǎn)。
1.這不是一本嚴(yán)肅的教科書
在輕松的氛圍中快速學(xué)習(xí)知識(shí)才能達(dá)到比較好的效果,所以我會(huì)在書中盡可能多地加入圖畫以幫助讀者加深理解。
2.它能讓讀者從零開始學(xué)習(xí)數(shù)據(jù)庫(kù)
筆者閱讀了很多有關(guān)MongoDB的書籍,我發(fā)現(xiàn)大多數(shù)MongoDB的書籍在講解時(shí)都喜歡拿關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行類比學(xué)習(xí),這樣會(huì)對(duì)一個(gè)數(shù)據(jù)庫(kù)的初學(xué)者(不了解關(guān)系型數(shù)據(jù)庫(kù)的讀者)造成困擾,所以我會(huì)盡量少用關(guān)系型數(shù)據(jù)庫(kù)的用法來(lái)解釋MongoDB,讓沒有關(guān)系型數(shù)據(jù)庫(kù)基礎(chǔ)的讀者也能獨(dú)立地理解學(xué)習(xí)MongoDB,而對(duì)有關(guān)系型數(shù)據(jù)庫(kù)基礎(chǔ)的讀者能拋開關(guān)系型數(shù)據(jù)的用法學(xué)習(xí)MongoDB。
3.這是一本入門的書,但不代表它不全面
請(qǐng)?jiān)徫覜]有在本書中進(jìn)行深入的原理講解,因?yàn)槲乙恢闭J(rèn)為對(duì)于學(xué)習(xí)一個(gè)技術(shù)來(lái)說(shuō)踏出第一步尤其重要。一旦你開始使用它,隨著解決以后遇到的問(wèn)題,你自然而然地就會(huì)更深入地理解它。
當(dāng)然,為了讓初學(xué)者對(duì)MongoDB有個(gè)全面的了解,我會(huì)盡可能地把它寫得全面。
4.它能夠幫助讀者建立NoSQL的思維
隨著本書從理論到實(shí)戰(zhàn)的講解,讀者能初步了解并且適應(yīng)NoSQL的思維,或者說(shuō)脫離關(guān)系型數(shù)據(jù)庫(kù)的束縛。在之后的實(shí)際開發(fā)應(yīng)用中讀者會(huì)感受到NoSQL數(shù)據(jù)庫(kù)的魅力——自由(對(duì)之前經(jīng)常使用關(guān)系型數(shù)據(jù)庫(kù)的讀者而言這一點(diǎn)感受會(huì)尤其深刻)。
5.閱讀完本書后讀者能夠勝任實(shí)際工作環(huán)境中MongoDB的相關(guān)開發(fā)管理工作
這是本書唯一且最終的目的。只要跟著書中的思路一步一步走,讀者就能達(dá)到相關(guān)工作的要求。
6.一本好書應(yīng)該包含作者的思想,一些不會(huì)過(guò)時(shí)的東西
當(dāng)我開始寫這本書的時(shí)候,MongoDB的版本是3.4,當(dāng)這本書寫完發(fā)行的時(shí)候,我不能確保軟件版本還是3.4,這也是計(jì)算機(jī)方面的書籍總是容易過(guò)時(shí)的原因?紤]到這一點(diǎn),我在寫本書時(shí)會(huì)講解一些我獲取更新知識(shí)的途徑、我的學(xué)習(xí)思路以及分享一些有趣的網(wǎng)站,以確保當(dāng)本書中的例子因?yàn)榘姹驹蛴行┎辉龠m用時(shí),讀者能很快地獲取到最新的軟件用法在哪里。希望這些方法不僅僅為讀者在學(xué)習(xí)MongoDB上,也能在學(xué)習(xí)其他計(jì)算機(jī)技術(shù)時(shí)有所幫助。
本書特點(diǎn)
?內(nèi)容全面:對(duì)MongoDB相關(guān)知識(shí)進(jìn)行全面講解,讓讀者對(duì)MongoDB有全面的認(rèn)識(shí)。
?輕松入門:以最直接、最細(xì)致的方式指導(dǎo)讀者輕松掌握MongoDB安裝、部署與使用。
?層次清晰:理論與實(shí)踐部分分離,4個(gè)部分由淺入深,層層遞進(jìn),學(xué)習(xí)路線清晰。
?實(shí)戰(zhàn)引導(dǎo):以實(shí)際工作框架為例子,講解MongoDB的運(yùn)用,讓讀者真正能勝任MongoDB的開發(fā)管理工作。
本書適合讀者
本書適合MongoDB的初學(xué)者,希望深入了解MongoDB安裝部署、開發(fā)優(yōu)化的軟件工程師,希望深入了解MongoDB管理、集群擴(kuò)展的數(shù)據(jù)運(yùn)維管理員,以及任何對(duì)MongoDB相關(guān)技術(shù)感興趣的讀者。
注意事項(xiàng)
本書中所用示例以及操作步驟全部經(jīng)過(guò)作者實(shí)際操作,檢驗(yàn)有效,請(qǐng)讀者在學(xué)習(xí)時(shí)按照本書選用的軟件版本進(jìn)行操作,已經(jīng)在使用MongoDB軟件的開發(fā)者在查閱本書示例時(shí),請(qǐng)注意MongoDB版本和驅(qū)動(dòng)版本以及環(huán)境配置。
本書使用方式
初學(xué)者
希望初學(xué)者能夠通讀本書,理論部分快速閱讀,實(shí)踐部分動(dòng)手操作。
初學(xué)者如果時(shí)間充裕,建議按本書章節(jié)先后順序進(jìn)行學(xué)習(xí),先通讀理論,如有不懂的地方可以不必深究,然后實(shí)戰(zhàn),接著進(jìn)階架構(gòu),最后學(xué)習(xí)經(jīng)驗(yàn)篇。
初學(xué)者如果時(shí)間緊迫,可以從實(shí)戰(zhàn)部分開始學(xué)習(xí),直接上手使用MongoDB參與到工作中,閑暇時(shí)再學(xué)習(xí)理論會(huì)有更深刻的理解,接著進(jìn)階架構(gòu),最后再學(xué)習(xí)經(jīng)驗(yàn)篇。
有相關(guān)經(jīng)驗(yàn)的技術(shù)人員
有相關(guān)經(jīng)驗(yàn)的技術(shù)人員可以根據(jù)自身需求和薄弱環(huán)節(jié)選擇性閱讀。閑暇時(shí)可閱讀理論部分和經(jīng)驗(yàn)部分,本書理論部分和經(jīng)驗(yàn)部分是作者結(jié)合自身工作經(jīng)驗(yàn)對(duì)MongoDB的理解,希望能與有經(jīng)驗(yàn)讀者的看法相互印證碰撞,讓讀者形成自己的理解。
工作時(shí)也可參考本書相關(guān)章節(jié),基本命令章節(jié)、Java驅(qū)動(dòng)操作章節(jié)、SpringDataMongoDB驅(qū)動(dòng)操作章節(jié),管理維護(hù)命令、集群構(gòu)建章節(jié)等,可以作為讀者身邊的速查手冊(cè)。
祝大家開卷有益!
本書示例代碼
本書示例代碼以及軟件開發(fā)包下載地址(注意數(shù)字與字母大小寫)如下:
http://pan.baidu.com/s/1boKG28R
如果下載有問(wèn)題,請(qǐng)聯(lián)系booksaga@163.com,郵件主題為“MongoDB代碼”。
致謝
感謝23魔方公司和大廠開發(fā)組,讓我在MongoDB實(shí)戰(zhàn)中積累了寶貴的經(jīng)驗(yàn)。
玩網(wǎng)絡(luò)游戲,最害怕的是游戲公司不再對(duì)游戲進(jìn)行維護(hù),玩家對(duì)游戲失去信心,游戲區(qū)變成鬼區(qū)。10gen公司在2013年正式更名為MongoDBInc,感謝MongoDBInc公司技術(shù)人員不斷地完善MongoDB,讓我們能夠用上更快、更方便、更安全的MongoDB。沒有程序是沒有bug的,MongoDB在發(fā)布初期確實(shí)存在很多問(wèn)題,感謝那些能夠正視MongoDB并伴隨它成長(zhǎng)的人,讓一款經(jīng)典的數(shù)據(jù)庫(kù)和一種新的數(shù)據(jù)思維沒有被埋沒。好在MongoDB已經(jīng)長(zhǎng)成了一顆參天大樹,在數(shù)據(jù)庫(kù)領(lǐng)域占據(jù)了一席之地。
本書在寫作期間,參考了大量的MongoDB相關(guān)書籍,以及MongoDB官網(wǎng)、MongoDB中文社區(qū)、CSDN博客等網(wǎng)站的大量文章,感謝這些使用MongoDB并樂于分享的大神們。作者已經(jīng)盡力對(duì)書中的知識(shí)點(diǎn)用詞用語(yǔ)做了各種查證,但由于時(shí)間倉(cāng)促,難免有錯(cuò)誤和遺漏之處,懇請(qǐng)廣大讀者提出寶貴意見。
奮斗在一線的程序員,加班加點(diǎn)是常有的事情。編寫本書使用了作者一年的周末和假期時(shí)間以及很多個(gè)10小時(shí)以后的美好時(shí)光。沒有家人的鼓勵(lì)和支持是很難堅(jiān)持下來(lái)的。在此特別感謝我的家人劉悅夢(mèng)露的陪伴和諒解,以及好朋友楊婭蘇、古曙強(qiáng)、姚思伶對(duì)我的鼓勵(lì)。
最后特別感謝清華大學(xué)出版社的夏毓彥老師和他的同事們,正因?yàn)橛辛怂麄兊男燎诠ぷ,這本書才能順利出版。
張澤泉
2017年7月于成都
張澤泉,畢業(yè)于四川理工學(xué)院,數(shù)據(jù)工程師、中級(jí)職稱軟件設(shè)計(jì)師、CSDN博客專家。致力于數(shù)據(jù)采集、數(shù)據(jù)分析、數(shù)據(jù)分布式運(yùn)算架構(gòu)等技術(shù)的應(yīng)用與研究。多年一線MongoDB數(shù)據(jù)庫(kù)存儲(chǔ)、部署、開發(fā)經(jīng)驗(yàn),以及將其應(yīng)用于房地產(chǎn)數(shù)據(jù)分析、金融數(shù)據(jù)分析、基因數(shù)據(jù)分析等領(lǐng)域行業(yè)經(jīng)驗(yàn)。
第一部分 基礎(chǔ)與架構(gòu)理論篇
第1章 初識(shí)MongoDB 3
1.1 MongoDB簡(jiǎn)介 3
1.1.1 MongoDB是什么 3
1.1.2 MongoDB的歷史 3
1.1.3 MongoDB的發(fā)展情況 4
1.1.4 哪些公司在用MongoDB 5
1.2 MongoDB的特點(diǎn) 5
1.3 MongoDB應(yīng)用場(chǎng)景 6
1.3.1 MongoDB適用于以下場(chǎng)景 6
1.3.2 MongoDB不適合的場(chǎng)景 7
第2章 MongoDB的結(jié)構(gòu) 8
2.1 數(shù)據(jù)庫(kù) 8
2.1.1 數(shù)據(jù)庫(kù)的層次 8
2.1.2 數(shù)據(jù)的命名 8
2.1.3 自帶數(shù)據(jù)庫(kù) 9
2.2 普通集合 9
2.2.1 集合是什么 9
2.2.2 集合的特點(diǎn)—無(wú)模式 9
2.2.3 集合命名 9
2.2.4 子集合 10
2.3 固定集合(Capped) 10
2.3.1 Capped簡(jiǎn)介 10
2.3.2 Capped屬性特點(diǎn) 10
2.3.3 Capped應(yīng)用場(chǎng)景 10
2.4 文檔 11
2.4.1 文檔簡(jiǎn)介 11
2.4.2 文檔的特點(diǎn) 11
2.4.3 文檔的鍵名命名規(guī)則 11
2.5 數(shù)據(jù)類型 11
2.5.1 基本數(shù)據(jù)類型 11
2.5.2 數(shù)字類型說(shuō)明 12
2.5.3 日期類型說(shuō)明 14
2.5.4 數(shù)組類型說(shuō)明 16
2.5.5 內(nèi)嵌文檔類型說(shuō)明 16
2.5.6 _id鍵和ObjectId對(duì)象說(shuō)明 17
2.5.7 二進(jìn)制類型說(shuō)明——小文件存儲(chǔ) 19
2.6 索引簡(jiǎn)介 19
2.6.1 什么是索引 19
2.6.2 索引的作用 20
2.6.3 普通索引 20
2.6.4 唯一索引 20
2.6.5 地理空間索引 21
第3章 MongoDB的大文件存儲(chǔ)規(guī)范GridFs 22
3.1 GridFS簡(jiǎn)介 22
3.2 GridFS原理 23
3.3 GridFS應(yīng)用場(chǎng)景 24
3.4 GridFS的局限性 24
第4章 MongoDB的分布式運(yùn)算模型MapReduce 25
4.1 MapReduce簡(jiǎn)介 25
4.2 MapReduce原理 26
4.3 MapReduce應(yīng)用場(chǎng)景 28
第5章 MongoDB存儲(chǔ)原理 29
5.1 存取工作流程 29
5.2 存儲(chǔ)引擎 30
5.2.1 MMAP引擎 31
5.2.2 MMAPv1引擎 31
5.2.3 WiredTiger引擎 32
5.2.4 In-Memory 33
5.2.5 引擎的選擇 34
5.2.6 未來(lái)的引擎 34
第6章 了解MongoDB復(fù)制集 35
6.1 復(fù)制集簡(jiǎn)介 35
6.1.1 主從復(fù)制和副本集 35
6.1.2 副本集的特點(diǎn) 38
6.2 副本集工作原理 38
6.2.1 oplog(操作日志) 38
6.2.2 數(shù)據(jù)同步 39
6.2.3 復(fù)制狀態(tài)和本地?cái)?shù)據(jù)庫(kù) 39
6.2.4 阻塞復(fù)制 40
6.2.5 心跳機(jī)制 40
6.2.6 選舉機(jī)制 41
6.2.7 數(shù)據(jù)回滾 42
第7章 了解MongoDB分片 43
7.1 分片的簡(jiǎn)介 43
7.2 分片的工作原理 44
7.2.1 數(shù)據(jù)分流 44
7.2.2 chunkSize和塊的拆分 47
7.2.3 平衡器和塊的遷移 47
7.3 分片的應(yīng)用場(chǎng)景 48
第二部分 管理與開發(fā)入門篇
第8章 安裝MongoDB 51
8.1 版本和平臺(tái)的選擇 51
8.1.1 版本的選擇 51
8.1.2 平臺(tái)的選擇 52
8.1.3 32位和64位 52
8.2 Windows系統(tǒng)安裝MongoDB 53
8.2.1 查看安裝環(huán)境 53
8.2.2 安裝步驟 53
8.2.3 目錄文件了解 55
8.3 Linux系統(tǒng)安裝MongoDB 56
8.3.1 虛擬機(jī)簡(jiǎn)介 56
8.3.2 虛擬機(jī)安裝以及安裝Linux系統(tǒng) 58
8.3.3 安裝MongoDB 67
8.4 Mac OSX系統(tǒng)安裝MongoDB 73
8.4.1 查看安裝環(huán)境 73
8.4.2 官網(wǎng)安裝包安裝 73
8.4.3 Mac軟件倉(cāng)庫(kù)安裝 74
第9章 啟動(dòng)和停止MongoDB 75
9.1 命令行方式啟動(dòng)和參數(shù) 75
9.1.1 Windows系統(tǒng)命令行啟動(dòng)MongoDB 75
9.1.2 Linux系統(tǒng)命令行啟動(dòng)MongoDB 76
9.1.3 Mac OS 系統(tǒng)命令行啟動(dòng)MongoDB 79
9.2 啟動(dòng)參數(shù) 80
9.3 配置文件方式啟動(dòng) 82
9.4 啟動(dòng)MongoDB客戶端 84
9.5 關(guān)閉MongoDB 84
9.5.1 Windows系統(tǒng)設(shè)置MongoDB關(guān)閉 84
9.5.2 Linux系統(tǒng)設(shè)置MongoDB關(guān)閉 86
9.5.3 Mac OS系統(tǒng)設(shè)置MongoDB關(guān)閉 87
9.6 設(shè)置MongoDB開機(jī)啟動(dòng) 88
9.6.1 Windows系統(tǒng)設(shè)置MongoDB開機(jī)啟動(dòng) 88
9.6.2 Linux系統(tǒng)設(shè)置MongoDB開機(jī)啟動(dòng) 89
9.6.3 Mac OS系統(tǒng)設(shè)置MongoDB開機(jī)啟動(dòng) 93
9.7 修復(fù)未正常關(guān)閉的MongoDB 96
第10章 基本命令 97
10.1 數(shù)據(jù)庫(kù)常用命令 97
10.2 集合 99
10.3 文檔 101
10.4 索引 104
10.5 基本查詢 106
10.5.1 find簡(jiǎn)介 106
10.5.2 游標(biāo) 107
10.6 條件查詢 108
10.6.1 與操作 108
10.6.2 或操作$or 108
10.6.3 大于$gt 108
10.6.4 小于$lt 108
10.6.5 大于等于$gte 108
10.6.6 小于等于$lte 108
10.6.7 類型查詢$type 108
10.6.8 是否存在$exists 109
10.6.9 取模$mod 109
10.6.10 不等于$ne 109
10.6.11 包含$in 110
10.6.12 不包含$nin 110
10.6.13 $not: 反匹配 110
10.7 特定類型查詢 110
10.7.1 null 110
10.7.2 正則查詢(模糊查詢) 110
10.7.3 嵌套文檔 112
10.7.4 數(shù)組 112
10.8 高級(jí)查詢$where 115
10.8.1 JavaScript語(yǔ)言簡(jiǎn)介 115
10.8.2 JavaScript編程簡(jiǎn)單例子 115
10.8.3 JavaScript與$where結(jié)合使用 115
10.9 查詢輔助 116
10.9.1 條數(shù)限制limit 116
10.9.2 起始位置skip 116
10.9.3 排序sort 116
10.10 修改器 116
10.10.1 $set 116
10.10.2 $unset 117
10.10.3 $inc 117
10.10.4 $push 117
10.10.5 $pushAll 117
10.10.6 $pull 117
10.10.7 $addToSet 118
10.10.8 $pop 118
10.10.9 $rename 118
10.10.10 $bit 118
10.11 原生聚合運(yùn)算 119
10.11.1 數(shù)量查詢count 119
10.11.2 不同值distinct 119
10.11.3 分組group 120
10.11.4 靈活統(tǒng)計(jì)MapReduce 123
10.12 聚合管道 127
10.12.1 aggregate用法 127
10.12.2 管道操作器 128
10.12.3 管道表達(dá)式 139
10.12.4 復(fù)合使用示例 141
第11章 GUI工具:數(shù)據(jù)庫(kù)外部管理工具 144
11.1 MongoDB的GUI工具簡(jiǎn)介 144
11.2 Robomongo基本操作 144
11.2.1 連接MongoDB 145
11.2.2 創(chuàng)建刪除數(shù)據(jù)庫(kù) 145
11.2.3 插入文檔 145
11.2.4 查詢文檔 146
11.2.5 更新文檔 146
11.2.6 創(chuàng)建索引 147
11.2.7 執(zhí)行JavaScript 148
第12章 監(jiān)控 149
12.1 原生管理接口監(jiān)控 149
12.2 使用serverStatus在Shell監(jiān)控 150
12.3 使用mongostat在Shell監(jiān)控 151
12.4 使用第三方插件監(jiān)控 152
第13章 安全和訪問(wèn)控制 153
13.1 綁定監(jiān)聽ip 153
13.2 設(shè)置監(jiān)聽端口 154
13.3 用戶認(rèn)證 154
13.3.1 啟用認(rèn)證 154
13.3.2 添加用戶 155
13.3.3 用戶權(quán)限控制 155
13.3.4 用戶登錄 157
13.3.5 修改密碼 157
13.3.6 刪除用戶 157
第14章 數(shù)據(jù)管理 158
14.1 數(shù)據(jù)備份mongodump 158
14.2 數(shù)據(jù)恢復(fù)mongorestore 159
14.3 數(shù)據(jù)導(dǎo)出mongoexport 159
14.3.1 導(dǎo)出JSON格式 159
14.3.2 導(dǎo)出CSV格式 159
14.4 數(shù)據(jù)導(dǎo)入mongoimport 160
14.4.1 JSON格式導(dǎo)入 160
14.4.2 CSV格式導(dǎo)入 160
第15章 MongoDB驅(qū)動(dòng) 161
15.1 MongoDB驅(qū)動(dòng)支持的開發(fā)語(yǔ)言 161
15.2 驅(qū)動(dòng)使用流程 163
第16章 Java操作MongoDB 165
16.1 安裝JDK 165
16.2 Eclipse安裝 166
16.3 加載驅(qū)動(dòng) 167
16.4 查閱Java操作語(yǔ)法 167
16.5 測(cè)試操作 168
16.5.1 連接數(shù)據(jù)庫(kù) 168
16.5.2 插入數(shù)據(jù) 169
16.5.3 查詢數(shù)據(jù) 170
16.5.4 更新數(shù)據(jù) 170
16.5.5 刪除數(shù)據(jù) 171
16.5.6 聚合方法執(zhí)行 171
16.5.7 操作GridFS 172
16.5.8 運(yùn)行示例 173
第三部分 管理與開發(fā)進(jìn)階篇
第17章 副本集部署 177
17.1 總體思路 177
17.2 MongoDB環(huán)境準(zhǔn)備 178
17.3 創(chuàng)建目錄 181
17.4 創(chuàng)建Key 182
17.5 初始化副本集 183
17.6 數(shù)據(jù)同步測(cè)試 190
17.7 故障切換測(cè)試 192
17.8 Java程序連接MongoDB副本集測(cè)試 194
17.9 主從復(fù)制部署 196
第18章 分片部署 198
18.1 總體思路 198
18.2 創(chuàng)建3個(gè)Shard Server 201
18.2.1 創(chuàng)建目錄 201
18.2.2 以分片Shard Server模式啟動(dòng) 201
18.3 啟動(dòng)Config Server 202
18.3.1 創(chuàng)建目錄 202
18.3.2 以分片Config Server模式啟動(dòng) 202
18.4 啟動(dòng)Route Process 203
18.5 配置sharding 204
18.6 對(duì)數(shù)據(jù)庫(kù)mytest啟用分片 205
18.7 集合啟用分片 206
18.8 分片集群插入數(shù)據(jù)測(cè)試 208
18.9 分片的管理 209
18.9.1 移除Shard Server,回收數(shù)據(jù) 209
18.9.2 新增Shard Server 211
第19章 分片+副本集部署 212
19.1 總體思路 212
19.2 創(chuàng)建3個(gè)復(fù)制集 215
19.2.1 創(chuàng)建目錄 215
19.2.2 以復(fù)制集模式啟動(dòng) 215
19.2.3 初始化復(fù)制集 216
19.3 創(chuàng)建分片需要的Config Server與Route Process 217
19.3.1 創(chuàng)建目錄 217
19.3.2 啟動(dòng)Config Server、Route Process 218
19.4 配置分片 219
第20章 springMVC+maven+MongoDB框架搭建 221
20.1 SpringMVC和Maven簡(jiǎn)介 221
20.2 Eclipse安裝Maven插件 221
20.3 新建Maven類型的Web項(xiàng)目 222
20.4 搭建SpringMVC+MongoDB框架 224
20.4.1 jar包引入 224
20.4.2 新建SpringMVC配置文件 228
20.4.3 新建MongoDB配置文件 230
20.4.4 配置web.xml 231
20.4.5 創(chuàng)建index.jsp和IndexController 232
20.4.6 啟動(dòng)Web項(xiàng)目 233
第21章 注冊(cè)登錄功能的實(shí)現(xiàn) 235
21.1 UI框架Bootstrap 235
21.1.1 簡(jiǎn)介 235
21.1.2 應(yīng)用Bootstrap 235
21.2 新建用戶實(shí)體 236
21.3 注冊(cè)功能編寫 237
21.3.1 注冊(cè)頁(yè)面代碼 237
21.3.2 注冊(cè)后端代碼 239
21.4 登錄功能編寫 241
21.4.1 登錄頁(yè)面代碼 241
21.4.2 登錄后端代碼 243
21.5 運(yùn)行測(cè)試 244
21.6 Sping Data MongoDB操作 246
21.6.1 插入數(shù)據(jù) 247
21.6.2 查詢數(shù)據(jù) 247
21.6.3 更新數(shù)據(jù) 249
21.6.4 刪除數(shù)據(jù) 250
21.6.5 聚合方法執(zhí)行 250
21.6.6 操作GridFS 251
21.6.7 運(yùn)行示例 253
第四部分 管理與開發(fā)經(jīng)驗(yàn)篇
第22章 MongoDB開發(fā)的經(jīng)驗(yàn) 257
22.1 盡量選取穩(wěn)定新版本64位的MongoDB 257
22.2 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì) 257
22.3 查詢的技巧 259
22.4 安全寫入數(shù)據(jù) 262
22.5 索引設(shè)置的技巧 264
22.6 不要用GridFS處理小的二進(jìn)制文件 268
22.7 優(yōu)化器profiler 269
第23章 MongoDB管理的經(jīng)驗(yàn) 271
23.1 MongoDB安全管理 271
23.2 不要將MongoDB與其他服務(wù)部署到同一臺(tái)機(jī)器上 273
23.3 單機(jī)開啟日志Journal,多機(jī)器使用副本集 274
23.4 生產(chǎn)環(huán)境不要信任repair恢復(fù)的數(shù)據(jù) 275
23.5 副本集管理 276
23.6 副本集回滾丟失的數(shù)據(jù) 278
23.7 分片的管理 279
23.8 MongoDB鎖 280
附錄 A MongoDB地理位置距離單位 285
附錄 B 相關(guān)網(wǎng)址 287
第2章
?MongoDB的結(jié)構(gòu)?
要很好地使用MongoDB,需要對(duì)它的組成結(jié)構(gòu)進(jìn)行了解,本章我們就來(lái)學(xué)習(xí)MongoDB的結(jié)構(gòu)。
MongoDB的組成結(jié)構(gòu)如下:數(shù)據(jù)庫(kù)包含集合,集合包含文檔,文檔包含一個(gè)或多個(gè)鍵值對(duì),如圖2-1所示。
圖2-1文檔包含鍵值對(duì)key:value
2.1數(shù)據(jù)庫(kù)
2.1.1數(shù)據(jù)庫(kù)的層次
MongoDB中數(shù)據(jù)庫(kù)包含集合,集合包含文檔。一個(gè)MongoDB服務(wù)器實(shí)例可以承載多個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)之間是完全獨(dú)立的。每個(gè)數(shù)據(jù)庫(kù)有獨(dú)立的權(quán)限控制,在磁盤上不同的數(shù)據(jù)庫(kù)放置在不同的文件中。一個(gè)應(yīng)用的所有數(shù)據(jù)建議存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)中。當(dāng)同一個(gè)MongoDB服務(wù)器上存放多個(gè)應(yīng)用數(shù)據(jù)時(shí),建議使用多個(gè)數(shù)據(jù)庫(kù),每個(gè)應(yīng)用對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)。
2.1.2數(shù)據(jù)的命名
數(shù)據(jù)庫(kù)通過(guò)名字來(lái)標(biāo)識(shí)。數(shù)據(jù)庫(kù)名可以使用滿足以下條件的任意UTF-8字符串來(lái)命名:
?不能是空字符串("")。
?不能含有''(空格)、.(點(diǎn))、$、/、\和\0(空字符)。
?應(yīng)全部小寫。
?最多64字節(jié)。
數(shù)據(jù)庫(kù)名有這么多的限制是因?yàn)閿?shù)據(jù)庫(kù)名最終會(huì)變成系統(tǒng)中的文件。
2.1.3自帶數(shù)據(jù)庫(kù)
MongoDB有一些一安裝就存在的數(shù)據(jù)庫(kù),這些數(shù)據(jù)庫(kù)介紹如下:
(1)admin
從權(quán)限角度來(lái)看,這是超級(jí)管理員("root")數(shù)據(jù)庫(kù)。在admin數(shù)據(jù)庫(kù)中添加的用戶會(huì)具有管理數(shù)據(jù)庫(kù)的權(quán)限。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫(kù)運(yùn)行,如列出所有的數(shù)據(jù)庫(kù)或者關(guān)閉服務(wù)器。
。2)local
這個(gè)數(shù)據(jù)庫(kù)永遠(yuǎn)不會(huì)被復(fù)制,可以用來(lái)存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合。
。3)config
當(dāng)Mongo用于分片設(shè)置時(shí),config數(shù)據(jù)庫(kù)在內(nèi)部使用,用于保存分片的相關(guān)信息。
2.2普通集合
2.2.1集合是什么
集合就是一組文檔。同一個(gè)應(yīng)用的數(shù)據(jù)我們建議存放在同一個(gè)數(shù)據(jù)庫(kù)中,但是一個(gè)應(yīng)用可能有很多個(gè)對(duì)象,比如一個(gè)網(wǎng)站可能需要記錄用戶信息,也需要記錄商品信息。集合解決了上述問(wèn)題,我們可以在同一個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)一個(gè)用戶集合和商品集合。集合類似于關(guān)系型數(shù)據(jù)庫(kù)中的表。
2.2.2集合的特點(diǎn)—無(wú)模式
集合是無(wú)模式的,也就是說(shuō)一個(gè)集合里的文檔可以是各式各樣的,非常自由。集合跟表最大的差異在于表是有表頭的,每一列存的什么信息需要對(duì)應(yīng),表在存儲(chǔ)信息之前需要先設(shè)計(jì)表,每一列是什么數(shù)據(jù)類型,字符串類型的數(shù)據(jù)是不能存儲(chǔ)進(jìn)數(shù)值類型的列中的。而集合則不需要設(shè)計(jì)結(jié)構(gòu),只要滿足文檔的格式就可以存儲(chǔ),即使他們的鍵名不同,非常靈活。MongoDB會(huì)自動(dòng)識(shí)別每個(gè)字段的類型。
2.2.3集合命名
集合通過(guò)名字來(lái)標(biāo)識(shí)區(qū)分。集合名可以是滿足下列條件的任意UTF-8字符串。
?不能是空字符串("")。
?不能含有\(zhòng)0(空字符),這個(gè)字符表示集合名的結(jié)尾。
?不能以“system.”開頭,這是為系統(tǒng)集合保留的前綴。
?不能含有保留字符$。這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。除非你要訪問(wèn)這種系統(tǒng)創(chuàng)建的集合,否則千萬(wàn)不要在名字里出現(xiàn)$。有些驅(qū)動(dòng)程序的確支持在集合名里面包含$,但是我們不建議使用。
2.2.4子集合
子集合是集合下的另一個(gè)集合,可以讓我們更好地組織存放數(shù)據(jù)。慣例是使用“.”字符分開命名來(lái)表示子集合。
在MongoDB中使用子集合,可以讓數(shù)據(jù)的組織更清晰。例如我做一個(gè)論壇模塊,按照面向?qū)ο蟮木幊涛覀儜?yīng)該有一個(gè)論壇的集合forum,但是論壇功能里應(yīng)該還有很多對(duì)象,比如用戶、帖子。我們就可以把論壇用戶集合命名為forum.user,把論壇帖子集合命名為forum.post。
也就是我們把數(shù)據(jù)存儲(chǔ)在子集合forum.user和forum.post里,數(shù)據(jù)forum集合是不存儲(chǔ)數(shù)據(jù)的,甚至可以刪除掉。也就是說(shuō)forum這個(gè)集合跟它的子集合沒有數(shù)據(jù)上的關(guān)系。子集合只是為了讓數(shù)據(jù)組織結(jié)構(gòu)更清晰。
2.3固定集合(Capped)
2.3.1Capped簡(jiǎn)介
MongoDB固定集合(CappedCollections)是性能出色且有著固定大小的集合,對(duì)于大小固定,我們可以想象它就像一個(gè)環(huán)形隊(duì)列,如果空間不足,最早的文檔就會(huì)被刪除,為新的文檔騰出空間。這意味著固定集合在新文檔插入的時(shí)候自動(dòng)淘汰最早的文檔。
2.3.2Capped屬性特點(diǎn)
。1)對(duì)固定集合插入速度極快。
。2)按照插入順序的查詢輸出速度極快。
。3)能夠在插入最新數(shù)據(jù)時(shí),淘汰最早的數(shù)據(jù)。
。4)固定集合文檔按照插入順序儲(chǔ)存,默認(rèn)情況下查詢?nèi)烤褪前凑詹迦腠樞蚍祷氐,也可以使?natural屬性反序返回。
。5)可以插入及更新,但更新不能超出collection的大小,否則更新失敗。
。6)不允許刪除,但是可以調(diào)用drop()刪除集合中的所有行,drop后需要顯式地重建集合。
。7)在32位機(jī)器上一個(gè)capppedcollection的最大值約為482.5MB,64位機(jī)器上只受系統(tǒng)文件大小的限制。
2.3.3Capped應(yīng)用場(chǎng)景
。1)儲(chǔ)存日志信息。
。2)緩存一些少量的文檔。
一般來(lái)說(shuō),固定集合適用于任何想要自動(dòng)淘汰過(guò)期文檔的場(chǎng)景,沒有太多的操作限制。
2.4文檔
2.4.1文檔簡(jiǎn)介
文檔是MongoDB中數(shù)據(jù)的基本單元。我們前面已經(jīng)講過(guò)MongoDB數(shù)據(jù)存儲(chǔ)格式為BSON。鍵值對(duì)按照BSON格式組合起來(lái)存入MongoDB就是一個(gè)文檔。
2.4.2文檔的特點(diǎn)
。1)每一個(gè)文檔都有一個(gè)特殊的鍵“_id”,它在文檔所處的集合中是唯一的。
(2)文檔中的鍵值對(duì)是有序的,前后順序不同就是不同的文檔。
。3)文檔中的鍵值對(duì),值不僅可以是字符串,還可以是數(shù)值,日期等數(shù)據(jù)類型。
。4)文檔的鍵值對(duì)區(qū)分大小寫。
。5)文檔的鍵值對(duì)不能用重復(fù)的鍵。
2.4.3文檔的鍵名命名規(guī)則
文檔的鍵是字符串。除了少數(shù)例外情況,鍵可以使用任意UTF-8字符。
。1)鍵名不能含有\(zhòng)0(空字符)。
(2)鍵名最好不含有.和$,它們存在特別含義。
。3)鍵名最好不使用下劃線“_”開頭。
你還可能感興趣
我要評(píng)論
|