出版時間:2012-10 出版社:人民郵電出版社 作者:[美] Kyle Banker 頁數(shù):244 字?jǐn)?shù):394000 譯者:丁雪豐
Tag標(biāo)簽:無
前言
數(shù)據(jù)庫是信息時代的“老黃牛”,就像希臘神話中的擎天神Atlas 一樣,它們默默地支撐著我們賴以生存的數(shù)字世界。發(fā)布評論和微博,乃至查找并排序內(nèi)容,這些操作從本質(zhì)上來說都是和數(shù)據(jù)庫打交道,而我們恰恰會對此熟視無睹。正因?yàn)檫@個基礎(chǔ)的“隱蔽功能”,我總是會對數(shù)據(jù)庫心存敬畏,這種敬畏和走過本來只讓汽車通行的懸索大橋時所產(chǎn)生的敬畏沒什么分別。數(shù)據(jù)庫有很多種形式。圖書館里的圖書目錄和卡片分類都算是其中的一種,昔日Perl程序員使用的特殊結(jié)構(gòu)的文本文件也是。也許現(xiàn)在最廣為人知的數(shù)據(jù)庫,就是功能豐富、讓人賺得盆滿缽盈的關(guān)系型數(shù)據(jù)庫了,它支撐著這個世界上的很多軟件。這些關(guān)系型數(shù)據(jù)庫,連同它們那理想化的第三范式和富于表達(dá)力的SQL接口,仍然讓那些保守派肅然起敬。但是,作為一名有幾年工作經(jīng)驗(yàn)的Web應(yīng)用程序開發(fā)者,我渴望嘗試一些能替代占據(jù)統(tǒng)治地位的關(guān)系型數(shù)據(jù)庫的后起之秀,發(fā)現(xiàn)MongoDB之后,便對它愛不釋手。MongoDB使用類似JSON的結(jié)構(gòu)來表示數(shù)據(jù),我喜歡這個設(shè)計。JSON簡單、直觀而且易用。MongoDB還將其查詢語言構(gòu)建于JSON之上,使得這個新數(shù)據(jù)庫在使用上很舒適很協(xié)調(diào)。接口之外的一些引人注目的特性讓它更具魅力,例如方便復(fù)制和分片。我使用MongoDB構(gòu)建了一些應(yīng)用程序,親身體驗(yàn)了它帶給開發(fā)的舒適性之后,便深深愛上了MongoDB。機(jī)緣巧合,我加入了10gen——領(lǐng)導(dǎo)開發(fā)開源數(shù)據(jù)庫MongoDB的公司。兩年來,我有機(jī)會改善多款客戶端驅(qū)動,與眾多客戶一起部署他們的MongoDB。我希望在這一過程中所積累的經(jīng)驗(yàn)都能原汁原味地體現(xiàn)在你正閱讀的這本書中。作為一款還在不斷完善的作品,MongoDB還有很長的路要走,但它已經(jīng)成功地支撐了成百上千的應(yīng)用程序,運(yùn)行在大大小小的數(shù)據(jù)庫集群之上,而且每天都在進(jìn)步。MongoDB每天都能為不少開發(fā)者帶來驚喜,甚至是幸福,希望你也能擁抱MongoDB,感受它的魅力。
內(nèi)容概要
《MongoDB實(shí)戰(zhàn)》由10gen公司(開發(fā)并支持開源數(shù)據(jù)庫MongoDB)負(fù)責(zé)維護(hù)Ruby及C語言官方MongoDB驅(qū)動的軟件工程師Kyle
Banker編寫而成,是一本全面細(xì)致介紹MongoDB及其應(yīng)用的權(quán)威指南?!禡ongoDB實(shí)戰(zhàn)》共分三部分,首先介紹MongoDB的歷史、特性和使用場景,然后細(xì)致闡述MongoDB
API,專注于應(yīng)用程序開發(fā)漸近式描述電子商務(wù)應(yīng)用的模式與操作,并最后從DBA的角度考量性能和運(yùn)維。另外,書中還介紹了面向文檔數(shù)據(jù)庫模型,并深度剖析了復(fù)制、自動分片以及部署等特性。
《MongoDB實(shí)戰(zhàn)》適合初中級應(yīng)用程序開發(fā)者和DBA學(xué)習(xí)參考。
作者簡介
Kyle Banker
軟件工程師,曾工作于10gen公司,負(fù)責(zé)維護(hù)Ruby及C語言的官方MongoDB驅(qū)動、領(lǐng)導(dǎo)MongoDB文檔項(xiàng)目并開發(fā)培訓(xùn)課程,且為客戶提供咨詢、商業(yè)支持和培訓(xùn);現(xiàn)任職于Snapjoy(為用戶提供默認(rèn)私有的在線照片備份和自動管理服務(wù))。
書籍目錄
第一部分 入門指南
第1章 為現(xiàn)代Web而生的數(shù)據(jù)庫
1.1 生于云端
1.2 MongoDB的主要特性
1.2.1 文檔數(shù)據(jù)模型
1.2.2 即時查詢
1.2.3 二級索引
1.2.4 復(fù)制
1.2.5 速度和持久性
1.2.6 數(shù)據(jù)庫擴(kuò)展
1.3 MongoDB的核心服務(wù)器和工具
1.3.1 核心服務(wù)器
1.3.2 JavaScript Shell
1.3.3 數(shù)據(jù)庫驅(qū)動
1.3.4 命令行工具
1.4 為什么選擇MongoDB
1.4.1 MongoDB與其他數(shù)據(jù)庫的對比
1.4.2 使用場景和生產(chǎn)部署
1.5 提示與局限
1.6 小結(jié)
第2章 MongoDB JavaScript Shell
2.1 深入MongoDB Shell
2.1.1 啟動Shell
2.1.2 插入與查詢
2.1.3 更新文檔
2.1.4 刪除數(shù)據(jù)
2.2 創(chuàng)建索引并查詢
2.2.1 創(chuàng)建一個大集合
2.2.2 索引與explain()
2.3 基本管理
2.3.1 獲取數(shù)據(jù)庫信息
2.3.2 命令工作原理
2.4 獲得幫助
2.5 小結(jié)
第3章 使用MongoDB編寫程序
3.1 通過Ruby使用MongoDB
3.1.1 安裝與連接
3.1.2 用Ruby插入文檔
3.1.3 查詢與游標(biāo)
3.1.4 更新與刪除
3.1.5 數(shù)據(jù)庫命令
3.2 驅(qū)動是如何工作的
3.2.1 對象ID生成
3.2.2 BSON
3.2.3 網(wǎng)絡(luò)傳輸
3.3 構(gòu)建簡單的應(yīng)用程序
3.3.1 配置
3.3.2 收集數(shù)據(jù)
3.3.3 查看歸檔
3.4 小結(jié)
第二部分 MongoDB與應(yīng)用程序開發(fā)
第4章 面向文檔的數(shù)據(jù)
4.1 Schema設(shè)計原則
4.2 設(shè)計電子商務(wù)數(shù)據(jù)模型
4.2.1 產(chǎn)品與分類
4.2.2 用戶與訂單
4.2.3 評論
4.3 具體細(xì)節(jié):數(shù)據(jù)庫、集合與文檔
4.3.1 數(shù)據(jù)庫
4.3.2 集合
4.3.3 文檔與插入
4.4 小結(jié)
第5章 查詢與聚合
5.1 電子商務(wù)查詢
5.1.1 產(chǎn)品、分類與評論
5.1.2 用戶與訂單
5.2 MongoDB查詢語言
5.2.1 查詢選擇器
5.2.2 查詢選項(xiàng)
5.3 聚合指令
5.3.1 根據(jù)用戶對評論進(jìn)行分組
5.3.2 根據(jù)地域?qū)τ唵螒?yīng)用MapReduce
5.4 詳解聚合
5.4.1 max()與min()
5.4.2 distinct
5.4.3 group
5.4.4 map-reduce
5.5 小結(jié)
第6章 更新、原子操作與刪除
6.1 文檔更新入門
6.2 電子商務(wù)數(shù)據(jù)模型中的更新
6.2.1 產(chǎn)品與分類
6.2.2 評論
6.2.3 訂單
6.3 原子文檔處理
6.3.1 訂單狀態(tài)變遷
6.3.2 庫存管理
6.4 具體細(xì)節(jié):MongoDB的更新與刪除
6.4.1 更新類型與選項(xiàng)
6.4.2 更新操作符
6.4.3 findAndModify命令
6.4.4 刪除
6.4.5 并發(fā)性、原子性與隔離性
6.4.6 更新性能說明
6.5 小結(jié)
第三部分 精通MongoDB
第7章 索引與查詢優(yōu)化
7.1 索引理論
7.1.1 思想實(shí)驗(yàn)
7.1.2 核心索引概念
7.1.3 B樹
7.2 索引實(shí)踐
7.2.1 索引類型
7.2.2 索引管理
7.3 查詢優(yōu)化
7.3.1 識別慢查詢
7.3.2 分析慢查詢
7.3.3 查詢模式
7.4 小結(jié)
第8章 復(fù)制
8.1 復(fù)制概述
8.1.1 為什么復(fù)制很重要
8.1.2 復(fù)制的使用場景
8.2 副本集
8.2.1 配置
8.2.2 復(fù)制的工作原理
8.2.3 管理
8.3 主從復(fù)制
8.4 驅(qū)動與復(fù)制
8.4.1 連接與故障轉(zhuǎn)移
8.4.2 寫關(guān)注
8.4.3 讀擴(kuò)展
8.4.4 標(biāo)簽
8.5 小結(jié)
第9章 分片
9.1 分片概述
9.1.1 何謂分片
9.1.2 分片的工作原理
9.2 示例分片集群
9.2.1 配置
9.2.2 寫入分片集群
9.3 分片集群的查詢與索引
9.3.1 分片查詢類型
9.3.2 索引
9.4 選擇分片鍵
9.4.1 低效的分片鍵
9.4.2 理想的分片鍵
9.5 生產(chǎn)環(huán)境中的分片
9.5.1 部署與配置
9.5.2 管理
9.6 小結(jié)
第10章 部署與管理
10.1 部署
10.1.1 部署環(huán)境
10.1.2 服務(wù)器配置
10.1.3 數(shù)據(jù)的導(dǎo)入與導(dǎo)出
10.1.4 安全
10.2 監(jiān)控與診斷
10.2.1 日志
10.2.2 監(jiān)控工具
10.2.3 外部監(jiān)控應(yīng)用程序
10.2.4 診斷工具(mongosniff、bsondump)
10.3 維護(hù)
10.3.1 備份與恢復(fù)
10.3.2 壓緊與修復(fù)
10.3.3 升級
10.4 性能調(diào)優(yōu)
10.4.1 為提升性能檢查索引和查詢
10.4.2 添加內(nèi)存
10.4.3 提升磁盤性能
10.4.4 水平擴(kuò)展
10.4.5 尋求專業(yè)幫助
10.5 小結(jié)
附錄A 安裝
附錄B 設(shè)計模式
附錄C 二進(jìn)制數(shù)據(jù)與GridFS
附錄D 在PHP、Java與C++中使用MongoDB
附錄E 空間索引
章節(jié)摘錄
版權(quán)頁: 插圖: 有了充足的內(nèi)存,所有使用中的數(shù)據(jù)文件最終都會被加載到內(nèi)存里。當(dāng)那塊內(nèi)存發(fā)生改變時,比如執(zhí)行寫操作時,那些改變會被操作系統(tǒng)異步地刷到磁盤上,而寫操作很快,是直接發(fā)生在內(nèi)存里的。數(shù)據(jù)完全裝入內(nèi)存是最為理想的狀態(tài),因?yàn)榇疟P訪問的數(shù)量會降到最低程度。但如果使用中的數(shù)據(jù)集無法全部裝入內(nèi)存,就該出現(xiàn)頁錯誤了。也就是說操作系統(tǒng)會頻繁訪問磁盤,大大減緩讀寫操作。最壞的情況下,數(shù)據(jù)大小遠(yuǎn)遠(yuǎn)大于可用內(nèi)存,這時任何讀寫操作的數(shù)據(jù)都必須到磁盤上做頁交換。這種情況稱為顛簸(thrashing),會導(dǎo)致性能嚴(yán)重下滑。 還好這種情況相對容易避免。最起碼要保證索引都能放人內(nèi)存;對于為何避免創(chuàng)建無用索引如此重要,這就是原因之一。擁有額外的索引,就會要求更多的內(nèi)存來維護(hù)那些索引。同樣道理,每個索引應(yīng)該只包含它需要的鍵:有時會用到三鍵復(fù)合索引,但請注意它要比簡單的單鍵索引占用更多的空間。 理想情況下,索引和使用中的數(shù)據(jù)集都能放入內(nèi)存。但評估部署時需要有多少內(nèi)存并非易事。你可以通過查看stats命令的結(jié)果來了解總的索引大小。但要找到工作集(working set)大小卻沒這么容易,因?yàn)槊總€應(yīng)用程序都不一樣。工作集通常是查詢與更新的全部數(shù)據(jù)的子集。舉例來說,假設(shè)你有100萬用戶,只有一半是活躍用戶,那么工作集就是用戶集合的一半大小。如果全部都是活躍用戶,那么工作集就等于整個數(shù)據(jù)集。 在第10章,我們會重溫工作集的概念,了解診斷硬件相關(guān)性能問題的具體手段。就目前而言,只需知道添加新索引有潛在的成本,關(guān)注索引與工作集大小與內(nèi)存的比率,這能幫你在數(shù)據(jù)增長 時維護(hù)良好的性能。 7.1.3 B樹 前文提到過,MongoDB內(nèi)部使用B樹來表示索引。B樹無處不在,至少從20世紀(jì)70年代后期開始就流行于數(shù)據(jù)庫記錄和索引中。①如果你使用過其他數(shù)據(jù)庫系統(tǒng),那么可能已經(jīng)熟知使用B樹的各種情況了。這很好,你可以將之前的大多數(shù)索引相關(guān)的知識有效地利用起來。如果不太了解B樹,也沒關(guān)系,本節(jié)將介紹與使用MongoDB最為相關(guān)的概念。 B樹有兩個顯著特點(diǎn),并因此成為了數(shù)據(jù)庫索引的理想選擇。第一,它們能用于多種查詢,包括精確匹配、范圍條件、排序、前綴匹配和僅用索引的查詢。第二,在添加和刪除鍵的時候,它們?nèi)阅鼙3制胶狻?我們會看到一棵簡單的B樹,討論一些應(yīng)該牢記在心的原則。想象有一個用戶的集合,在姓氏(last name)和年齡(age)字段上創(chuàng)建了一個復(fù)合索引。②結(jié)果B樹的抽象表述可能是圖7.5這樣的。
媒體關(guān)注與評論
“作者是10gen的人,對所有細(xì)節(jié)都了如指掌。讀這本書,就好像跟一位領(lǐng)域?qū)<覍υ?,一切都講得那么簡潔明了,淺顯易懂。所有MongoDB用戶都應(yīng)該看一看?!薄芭c市面上其他同類主題的書相比,這本書是最好的?!薄x者評論
編輯推薦
MongoDB是為處理大數(shù)據(jù)而生的一款面向文檔的數(shù)據(jù)庫,由10gen公司開發(fā)和維護(hù)。Kyle Banker的《MongoDB實(shí)戰(zhàn)》基于MongoDB 2.0+,全面系統(tǒng)地講解了設(shè)計、實(shí)現(xiàn)、安裝和維護(hù)MongoDB的各方面內(nèi)容。本書也是在大量第一手資料的基礎(chǔ)上形成的,其權(quán)威性毋庸置疑?!禡ongoDB實(shí)戰(zhàn)》篇幅適中,內(nèi)容深淺得當(dāng),文字通俗易懂,再配以直觀形象的插圖和貼近實(shí)戰(zhàn)的代碼示例,非常適合MongoDB學(xué)習(xí)者、開發(fā)人員及管理員學(xué)習(xí)參考。
名人推薦
“作者是10en的人,對所有細(xì)節(jié)都了如指掌。讀本書,就好像跟一位領(lǐng)域?qū)<覍υ?,一切都講得那么簡潔明了,淺顯易懂。所有MongoDB用戶都應(yīng)該看一看。”“與市面上其他同類主題的書相比,這本書是最好的?!?——亞馬遜讀者評論
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載