出版時間:2012-3 出版社:人民郵電出版社 作者:Kristina Chodorow 頁數(shù):121 譯者:巨 成,程顯峰
Tag標(biāo)簽:無
內(nèi)容概要
本書分兩部分,分別來自O(shè)’Reilly的《MongoDB擴(kuò)展技術(shù)》與《MongoDB開發(fā)技巧50例》兩書。
前一部分“MongoDB擴(kuò)展技術(shù)”指導(dǎo)大家創(chuàng)建一個不斷增長以滿足應(yīng)用程序需求的MongoDB集群,內(nèi)容簡明扼要,指導(dǎo)用戶設(shè)置和使用集群存儲大量數(shù)據(jù)并高效訪問數(shù)據(jù)。此外,讀者還可了解如何讓應(yīng)用程序兼容分布式數(shù)據(jù)庫系統(tǒng)。
具體的主題有:
通過分片設(shè)置MongoDB集群;
在集群中查詢和更新數(shù)據(jù);
操作、監(jiān)控和備份集群;
從程序設(shè)計(jì)角度,考慮如何應(yīng)對分片、配置服務(wù)器或者mongos進(jìn)程停止運(yùn)行的情況。
遵照其中建議,你很快就可通過MongoDB構(gòu)建和運(yùn)行一個高效的、可預(yù)測的分布式系統(tǒng)。
對于用戶而言,MongoDB上手很容易,但是構(gòu)建使用MongoDB的應(yīng)用程序時,一些棘手的問題便會接踵而來。怎樣權(quán)衡范式化與反范式化?怎樣處理復(fù)制
組失效的情況并進(jìn)行故障恢復(fù)?本書第二部分“MongoDB開發(fā)技巧50例”呈現(xiàn)了一系列的MongoDB提示和技巧,可幫助用戶解決與應(yīng)用程序設(shè)計(jì)與實(shí)
現(xiàn)、數(shù)據(jù)安全和監(jiān)控有關(guān)的各種問題。
內(nèi)容涵蓋10gen公司工程師的實(shí)際指導(dǎo),并通過以下5個話題展開了論述。
應(yīng)用設(shè)計(jì)技巧:模式設(shè)計(jì)階段應(yīng)注意的問題
實(shí)現(xiàn)技巧:基于MongoDB編寫應(yīng)用程序
優(yōu)化技巧:為應(yīng)用提速
數(shù)據(jù)安全技巧:在不犧牲太多性能的情況下,利用復(fù)制和日志保證數(shù)據(jù)安全
管理技巧:配置MongoDB并確保其平滑運(yùn)行
作者簡介
Kristina Chodorow
10gen公司的軟件工程師,MongoDB項(xiàng)目的核心成員,從事與數(shù)據(jù)庫服務(wù)器、PHP驅(qū)動、Perl驅(qū)動等相關(guān)的工作。她常在世界級技術(shù)大會上作報(bào)告,包括OSCON、LinuxCon、FOSDEM和Latinoware。
書籍目錄
MongoDB 擴(kuò)展技術(shù)
第1章 歡迎來到分布式計(jì)算的世界
第2章 理解分片
2.1 分割數(shù)據(jù)
2.1.1 分配數(shù)據(jù)
2.1.2 如何創(chuàng)建塊
2.2 平衡
2.3 mongos
2.4 配置服務(wù)器
2.5 集群的構(gòu)造
第3章 建立集群
3.1 選擇片鍵
3.1.1 小基數(shù)片鍵
3.1.2 升序片鍵
3.1.3 隨機(jī)片鍵
3.1.4 好片鍵
3.2 新老集合分片
3.2.1 快速起步
3.2.2 配置服務(wù)器
3.2.3 mongos
3.2.4 分片
3.2.5 數(shù)據(jù)庫和集合
3.3 增減容量
3.3.1 移除分片
3.3.2 修改分片中的服務(wù)器
第4章 使用集群
4.1 查詢
4.2 為什么會這樣
4.2.1 計(jì)數(shù)
4.2.2 唯一索引
4.2.3 更新
4.3 MapReduce
第5章 管理
5.1 使用命令行
5.1.1 了解概況
5.1.2 配置集合
5.1.3 應(yīng)該連接什么
5.2 監(jiān)控
5.2.1 mongostat
5.2.2 Web 管理界面
5.3 備份
5.4 關(guān)于架構(gòu)的建議
5.4.1 創(chuàng)建應(yīng)急站點(diǎn)
5.4.2 挖護(hù)城河
5.5 錯誤處理
5.5.1 分片停機(jī)
5.5.2 多數(shù)分片停機(jī)
5.5.3 配置服務(wù)器停機(jī)
5.5.4 mongos 進(jìn)程死掉
5.5.5 其他注意事項(xiàng)
第6章 學(xué)習(xí)資源
MongoDB 開發(fā)技巧50例
第1章 應(yīng)用設(shè)計(jì)技巧
1.1 技巧1:速度和完整性的折中
1.1.1 示例:網(wǎng)上購物車
1.1.2 考慮因素
1.2 技巧2:適應(yīng)未來的數(shù)據(jù)要范式化
1.3 技巧3:盡量單個查詢獲取數(shù)據(jù)
1.3.1 示例:博客
1.3.2 示例:相冊
1.4 技巧4:嵌入關(guān)聯(lián)數(shù)據(jù)
1.5 技巧5:嵌入時間點(diǎn)數(shù)據(jù)
1.6 技巧6:不要嵌入不斷增加的數(shù)據(jù)
1.7 技巧7:預(yù)填充數(shù)據(jù)
1.8 技巧8:盡可能預(yù)先分配空間
1.9 技巧9:用數(shù)組存放要匿名訪問的內(nèi)嵌數(shù)據(jù)
1.10 技巧10:文檔要自給自足
1.11 技巧11:優(yōu)先使用$ 操作符
1.11.1 深入了解
1.11.2 提高性能
1.12 技巧12:隨時聚合
1.13 技巧13:編寫代碼處理數(shù)據(jù)完整性問題
第2章 實(shí)現(xiàn)技巧
2.1 技巧14:使用正確的類型
2.2 技巧15:用簡單唯一的id 替換_id
2.3 技巧16:不要用文檔做_id
2.4 技巧17:不要用數(shù)據(jù)庫引用
2.5 技巧18:不要用GridFS 處理小的二進(jìn)制數(shù)據(jù)
2.6 技巧19:處理“無縫”故障切換
2.7 技巧20:處理復(fù)制組失效及故障恢復(fù)
第3章 優(yōu)化技巧
3.1 技巧21:盡可能減少磁盤訪問
3.2 技巧22:使用索引減少內(nèi)存占用
3.3 技巧23:不要到處使用索引
3.4 技巧24:索引覆蓋查詢
3.5 技巧25:使用復(fù)合索引加快多個查詢
3.6 技巧26:通過建立分級文檔加速掃描
3.7 技巧27:AND 型查詢要點(diǎn)
3.8 技巧28:OR 型查詢要點(diǎn)
第4章 數(shù)據(jù)安全性和一致性
4.1 技巧29:單機(jī)做日志,多機(jī)則復(fù)制
4.2 技巧30:堅(jiān)持使用復(fù)制或日志, 或兩者兼用
4.3 技巧31:不要信任repair 恢復(fù)的數(shù)據(jù)
4.4 技巧32:getlasterror
4.5 技巧33:開發(fā)過程中一定要使用安全寫入
4.6 技巧34:使用w 參數(shù)
4.7 技巧35:一定要給w 設(shè)置超時
4.8 技巧36:不要每次寫入都調(diào)用fsync
4.9 技巧37:崩潰之后正常啟動
4.10 技巧38:持久性服務(wù)器的瞬時備份
第5章 管理技巧
5.1 技巧39:手工清理塊集合
5.2 技巧40:用repair 壓縮數(shù)據(jù)庫
5.3 技巧41:不要改變復(fù)制組成員投票的權(quán)值
5.4 技巧42:無活躍節(jié)點(diǎn)時可重置復(fù)制組
5.5 技巧43:不必指定--shardsvr 和--configsvr 參數(shù)
5.6 技巧44:開發(fā)時才用--notablescan
5.7 技巧45:學(xué)習(xí)JavaScript
5.8 技巧46:在shell 中管理所有服務(wù)器和數(shù)據(jù)庫
5.9 技巧47:獲得幫助
5.10 技巧48:創(chuàng)建啟動文件
5.11 技巧49:自定義函數(shù)
5.12 技巧50:使用單個連接讀取自身寫入
章節(jié)摘錄
版權(quán)頁: 插圖: 1.適用的鍵 這條規(guī)則適用于任何升序排列的鍵值,而并不必須是時間戳。其他例子包括obj ecrid、日期、自增主鍵(很可能是從其他數(shù)據(jù)庫導(dǎo)入的)。只要鍵值趨向于無窮大,你就會面臨這個問題。 2.例外 基本上,這種片鍵總是一個壞主意,因?yàn)樗鼘?dǎo)致熱點(diǎn)必然存在。如果訪問量不大且用一個分片就能承受所有讀寫,那還行得通。當(dāng)然,如果遇到一個訪問量尖峰或者應(yīng)用開始變得更受歡迎,那它終會停止工作并且難以修復(fù)。除非你非常清楚自己在干什么,否則不要使用升序片鍵??隙ㄟ€有更好的片鍵存在,應(yīng)該避免使用這一個。 3.1.3隨機(jī)片鍵 有時為了避免熱點(diǎn),人們會選擇一個取值隨機(jī)的字段來分片。采用這種片鍵一開始還不錯,但是隨著數(shù)據(jù)量越變越大,它會變得越來越慢。 假設(shè)我們在分片集合中存儲照片的縮略圖。每個文檔都包含了照片的二進(jìn)制數(shù)據(jù)、二進(jìn)制數(shù)據(jù)的MD5散列值,以及一段描述、拍照時間和拍照人。我們決定在MD5散列值上做分片。 隨著集合的增長,我們最終會得到一組均勻分布于各分片的數(shù)據(jù)塊。目前為止一切順利?,F(xiàn)在,假設(shè)我們非常忙而分片2上的一個塊填滿并分裂了。配置服務(wù)器注意到分片2比分片1多出了10個塊并判定應(yīng)該抹平分片間的差距。這樣MongoDB就需要隨機(jī)加載5個塊的數(shù)據(jù)到內(nèi)存中并將其發(fā)送給分片1??紤]到數(shù)據(jù)序列的隨機(jī)性,一般情況下這些數(shù)據(jù)可能不會出現(xiàn)在內(nèi)存中。所以此時的MongoDB會給RAM帶來更大壓力,而且還會引發(fā)大量磁盤IO(磁盤IO總是非常慢)。 除此以外,片鍵上必須有索引,因此如果選擇了從不依據(jù)它進(jìn)行查詢的隨機(jī)鍵,基本上可以說是“浪費(fèi)”了一個索引。另外,考慮到每增加一個索引都會讓寫操作變得更慢,所以保持索引數(shù)量盡可能低也是非常重要的。 3.1.4好片鍵 我們真正需要的是一種將訪問模式也考慮進(jìn)去的方案。如果應(yīng)用會規(guī)律性地訪問25GB的數(shù)據(jù),我們就希望所有的分割和遷移都發(fā)生在這25 GB數(shù)據(jù)上,而不是隨機(jī)訪問數(shù)據(jù)以至于不斷地有新數(shù)據(jù)被從磁盤中復(fù)制到內(nèi)存里。 因此我們希望能找到這樣一個片鍵,它具備有良好的數(shù)據(jù)局部性(data locality)特征,但又不會因太局部而導(dǎo)致熱點(diǎn)出現(xiàn)。
編輯推薦
《深入學(xué)習(xí)MongoDB》適合所有MongoDB用戶閱讀參考。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載