編輯推薦
全球銷量逾百萬冊的係列圖書;
連續十餘年打造的經典圖書;
直觀、循序漸進的學習教程;
掌握關鍵知識的起點;
“Read Less,Do More”(精讀多練)的教學理念;
以示例引導讀者完成常見的任務;
每章內容針對初學者精心設計,1小時輕鬆閱讀學習,24小時徹底掌握關鍵知識;
每章案例與練習題助你輕鬆完成常見任務;
通過實踐提高應用技能,鞏固所學知識。
循序漸進的示例引導讀者完成常見的MongoDB開發任務。
問與答、測驗和練習幫助讀者檢驗知識的掌握情況。
“注意”、“提示”和“警告”指齣捷徑和解決方案。
本書涵蓋如下內容:
判斷何時使用NoSQL,何時使用傳統的RDBMS;
理解重要的MongoDB數據結構和設計概念;
安裝並配置MongoDB;
為應用程序選擇閤適的NoSQL分布模型;
規劃並實現類型和規模各異的MongoDB數據庫;
設計包括集閤和索引在內的MongoDB數據模型;
創建數據庫、集閤和索引;
掌握重要的MongoDB數據存儲、查找和檢索方法;
使用PHP、Python、Java和Node.js/Mongoose與數據交互;
平衡一緻性、性能和持久性;
管理、監視、檢查、保護、備份和修復MongoDB數據庫;
掌握分片和復製等高級技術;
實現GridFS存儲以高效地存儲和檢索大型數據文件;
評估查詢以優化性能;
找齣並排除集閤和數據庫存在的問題。
通過閱讀本書,即使讀者之前沒有任何MongoDB數據庫經驗,也能夠打造快速、高效的大數據和實時數據庫解決方案。本書采用直觀、循序漸進的方法,演示如何設計、實現和優化MongoDB數據庫、如何存儲和管理數據,以及如何應對分片和復製等高級任務。每章內容都建立在已學的知識之上,為讀者充分發揮MongoDB的威力打下堅實的基礎。
讀者可通過http://www.informit.com/content/images/9780672337130/downloads/9780672337130_Dayley_Code.zip下載本書所有的源代碼。
內容簡介
MongoDB是目前非常流行的一種非關係型數據庫(NoSQL),因其操作簡單、完全免費、源碼公開等特點,受到瞭IT從業人員的青睞,並被廣泛部署於實際的生産環境中。
《MongoDB入門經典》采用直觀、循序漸進的方法,講解瞭如何設計、實施和優化NoSQL數據庫,如何存儲和管理數據,以及如何執行數據分片和復製等任務。本書共分為24章,其內容涵蓋瞭NoSQL和傳統RDBMS的使用時機,理解基本的MongoDB數據結構和設計概念,安裝和配置MongoDB,為自己的應用選擇正確的NoSQL交付模型,規劃和實施不同類型和規模的MongoDB數據庫,設計MongoDB數據模型,創建新的數據庫、集閤和索引,掌握存儲、查找和獲取MongoDB數據的方法,通過PHP、Python、Java和Node.js/Mongoose與數據交互,在一緻性、性能和持久性方麵做齣平衡,對MongoDB數據庫進行管理、監控、驗證、保護、備份和修復;掌握數據分片和復製等高級技術;實施GridFS存儲來有效地存儲和獲取大型數據文件,評估用於優化性能的查詢,查找和診斷與集閤、數據庫相關的問題。
《MongoDB入門經典》適閤對NoSQL以及MongoDB感興趣的數據庫開發、運維人員閱讀。
作者簡介
Brad Dayley是一名谘詢軟件工程師,擁有20多年企業級應用程序開發經驗;設計並開發過大型商業應用程序,包括後端為NoSQL數據庫、前端為網頁的SAS應用程序;另著有Node.js, MongoDB and AngularJS Web Development和Sams Teach Yourself jQuery and JavaScript in 24 Hours。
內頁插圖
目錄
目錄
第1章 NoSQL和MongoDB簡介 1
1.1 NoSQL是什麼 1
1.1.1 文檔存儲數據庫 2
1.1.2 鍵/值數據庫 2
1.1.3 列存儲數據庫 2
1.1.4 圖存儲數據庫 2
1.2 選擇RDBMS、NoSQL還是
兩者 3
1.3 理解MongoDB 3
1.3.1 理解集閤 4
1.3.2 理解文檔 4
1.4 MongoDB數據類型 5
1.5 規劃數據模型 6
1.5.1 使用文檔引用範式化數據 6
1.5.2 使用嵌入式文檔對數據進行
反範式化 7
1.5.3 使用固定集閤 8
1.5.4 理解原子寫入操作 9
1.5.5 考慮文檔增大 9
1.5.6 找齣可使用索引、分片和復製的
情形 9
1.5.7 使用大型集閤還是大量集閤 10
1.5.8 確定數據的生命周期 10
1.5.9 考慮數據可用性和性能 10
1.6 小結 11
1.7 問與答 11
1.8 作業 11
1.8.1 小測驗 11
1.8.2 小測驗答案 12
1.8.3 練習 12
第2章 安裝和配置MongoDB 13
2.1 搭建MongoDB環境 13
2.1.1 安裝MongoDB 13
2.1.2 啓動MongoDB 14
2.1.3 配置MongoDB 15
2.1.4 停止MongoDB 15
2.2 訪問MongoDB HTTP接口 17
2.3 從MongoDB shell訪問
MongoDB 18
2.3.1 啓動MongoDB shell 18
2.3.2 理解MongoDB shell命令 18
2.3.3 理解MongoDB shell原生方法和
構造函數 19
2.3.4 理解命令參數和結果 20
2.4 MongoDB shell腳本編程 20
2.4.1 使用命令行選項--eval執行
JavaScript錶達式 20
2.4.2 在MongoDB shell中使用方法
load()來執行腳本 21
2.4.3 在命令mongo中指定要執行的
JavaScript文件 21
2.5 小結 23
2.6 問與答 23
2.7 作業 23
2.7.1 小測驗 24
2.7.2 小測驗答案 24
2.7.3 練習 24
第3章 在MongoDB shell中
使用JavaScript 25
3.1 定義變量 25
3.2 理解JavaScript數據類型 26
3.3 在MongoDB shell腳本中輸齣
數據 27
3.4 使用運算符 28
3.4.1 算術運算符 28
3.4.2 賦值運算符 28
3.4.3 比較運算符和條件語句 29
3.5 循環 31
3.5.1 while循環 31
3.5.2 do/while循環 31
3.5.3 for循環 32
3.5.4 for/in循環 32
3.5.5 中斷循環 33
3.6 創建函數 35
3.6.1 定義函數 35
3.6.2 嚮函數傳遞變量 35
3.6.3 從函數返迴值 36
3.6.4 使用匿名函數 36
3.7 理解變量作用域 38
3.8 使用JavaScript對象 38
3.8.1 使用對象語法 39
3.8.2 創建自定義對象 39
3.8.3 使用原型對象模式 40
3.9 操作字符串 41
3.9.1 閤並字符串 42
3.9.2 在字符串中搜索子串 42
3.9.3 替換字符串中的單詞 42
3.9.4 將字符串分割成數組 43
3.10 使用數組 44
3.10.1 閤並數組 45
3.10.2 迭代數組 45
3.10.3 將數組轉換為字符串 46
3.10.4 檢查數組是否包含特定的元素 46
3.10.5 在數組中增刪元素 46
3.11 添加錯誤處理 48
3.11.1 try/catch塊 48
3.11.2 引發自定義錯誤 49
3.11.3 使用finally 49
3.12 小結 50
3.13 問與答 50
3.14 作業 50
3.14.1 小測驗 50
3.14.2 小測驗答案 51
3.14.3 練習 51
第4章 配置用戶賬戶和訪問控製 52
4.1 理解admin數據庫 52
4.2 管理用戶賬戶 53
4.2.1 創建用戶賬戶 53
4.2.2 列齣用戶 56
4.2.3 刪除用戶 58
4.3 配置訪問控製 60
4.3.1 創建用戶管理員賬戶 60
4.3.2 啓用身份驗證 61
4.3.3 創建數據庫管理員賬戶 61
4.4 小結 64
4.5 問與答 64
4.6 作業 64
4.6.1 小測驗 64
4.6.2 小測驗答案 65
4.6.3 練習 65
第5章 在MongoDB shell中管理
數據庫和集閤 66
5.1 理解Database和Collection
對象 66
5.1.1 理解Connection對象 66
5.1.2 理解Database對象 67
5.1.3 理解Collection對象 68
5.2 管理數據庫 70
5.2.1 顯示數據庫列錶 70
5.2.2 切換到其他數據庫 70
5.2.3 創建數據庫 70
5.2.4 刪除數據庫 71
5.3 管理集閤 74
5.3.1 顯示數據庫的集閤列錶 74
5.3.2 創建集閤 74
5.3.3 刪除集閤 76
5.4 實現示例數據集 77
5.5 小結 80
5.6 問與答 81
5.7 作業 81
5.7.1 小測驗 81
5.7.2 小測驗答案 81
5.7.3 練習 82
第6章 使用MongoDB shell在
MongoDB集閤中查找文檔 83
6.1 理解Cursor對象 83
6.2 理解查詢運算符 84
6.3 從集閤中獲取文檔 86
6.4 查找特定的文檔 90
6.4.1 根據特定的字段值查找文檔 91
6.4.2 根據字段值數組查找文檔 91
6.4.3 根據字段值的大小查找文檔 91
6.4.4 根據數組字段的長度查找文檔 91
6.4.5 根據子文檔中的值查找文檔 92
6.4.6 根據數組字段的內容查找文檔 92
6.4.7 根據字段是否存在查找文檔 92
6.4.8 根據子文檔數組中的字段查找
文檔 92
6.5 小結 95
6.6 問與答 95
6.7 作業 95
6.7.1 小測驗 95
6.7.2 小測驗答案 95
6.7.3 練習 96
第7章 使用MongoDB shell執行其他
數據查找操作 97
7.1 計算文檔數 97
7.2 對結果集進行排序 99
7.3 限製結果集 101
7.3.1 限製結果集的大小 101
7.3.2 限製返迴的字段 103
7.3.3 結果集分頁 106
7.4 查找不同的字段值 109
7.5 小結 111
7.6 問與答 111
7.7 作業 111
7.7.1 小測驗 111
7.7.2 小測驗答案 112
7.7.3 練習 112
第8章 操作集閤中的MongoDB
文檔 113
8.1 理解寫入關注 113
8.2 配置數據庫連接錯誤處理 114
8.3 獲取數據庫寫入請求的狀態 114
8.4 理解數據庫更新運算符 116
8.5 使用MongoDB shell在集閤中
添加文檔 117
8.6 使用MongoDB shell更新集閤
中的文檔 119
8.7 使用MongoDB shell將文檔
保存到集閤中 123
8.8 使用MongoDB shell在集閤中
更新或插入文檔 125
8.9 使用MongoDB shell從集閤中
刪除文檔 128
8.10 小結 130
8.11 問與答 130
8.12 作業 130
8.12.1 小測驗 131
8.12.2 小測驗答案 131
8.12.3 練習 131
第9章 使用分組、聚閤和映射-歸並 132
9.1 在MongoDB shell中對查找
操作的結果進行分組 132
9.2 從MongoDB shell發齣請求時
使用聚閤來操作數據 136
9.2.1 理解方法aggregate() 136
9.2.2 使用聚閤框架運算符 136
9.2.3 使用聚閤錶達式運算符 137
9.3 在MongoDB shell中使用映射-
歸並生成新的數據結果 140
9.4 小結 145
9.5 問與答 145
9.6 作業 145
9.6.1 小測驗 145
9.6.2 小測驗答案 145
9.6.3 練習 146
第10章 在Java應用程序中實現
MongoDB 147
10.1 理解Java MongoDB驅動程序
中的對象 147
10.1.1 理解Java對象MongoClient 148
10.1.2 理解Java對象DB 149
10.1.3 理解Java對象DBCollection 149
10.1.4 理解Java對象DBCursor 150
10.1.5 理解Java對象BasicDBObject和
DBObject 151
10.2 使用Java查找文檔 153
10.2.1 使用Java從MongoD
前言/序言
《數據結構與算法解析》 內容簡介: 在當今信息爆炸的時代,數據是驅動一切的根本。而如何高效、優雅地組織和處理這些數據,則離不開數據結構與算法的強大支撐。本書《數據結構與算法解析》正是為想要深入理解並掌握這些核心計算機科學概念的讀者量身打造。它不隻是一本枯燥的理論教科書,更是一次充滿啓發、實戰導嚮的探索之旅,旨在幫助您構建堅實的編程基礎,提升解決復雜問題的能力。 本書從最基礎的概念入手,循序漸進地引導讀者理解各種經典數據結構的設計思想、實現原理和應用場景。我們不會停留在概念的堆砌,而是通過大量生動形象的比喻、直觀的圖示以及精心設計的代碼示例,將抽象的理論具象化,讓您真正“看得懂”、“學得會”。 第一部分:基礎概念與綫性數據結構 在旅程的開端,我們將首先建立堅實的理論基石。理解“數據結構”的本質——如何組織和存儲數據,以及“算法”的定義——解決問題的步驟和方法。我們將深入探討時間復雜度和空間復雜度的概念,這是衡量算法效率的關鍵指標,通過“大O錶示法”的引入,您將學會如何分析和比較不同算法的優劣,為後續的學習打下堅實的基礎。 隨後,我們將聚焦於最基礎也是最重要的一類數據結構:綫性數據結構。 數組(Array):作為最原始的數據存儲方式,我們將詳細解析其內存布局、隨機訪問的優勢以及插入刪除的劣勢。我們會探討變長數組(動態數組)的實現機製,以及其在實際應用中的權衡。 鏈錶(Linked List):與數組的連續內存存儲不同,鏈錶通過節點間的指針連接,提供瞭更靈活的插入和刪除操作。我們將深入剖析單嚮鏈錶、雙嚮鏈錶和循環鏈錶的設計,理解它們各自的優缺點,並解決鏈錶相關的經典問題,如反轉鏈錶、查找鏈錶中點、判斷鏈錶是否有環等。 棧(Stack):遵循“後進先齣”(LIFO)原則的棧,在函數調用、錶達式求值、括號匹配等場景中扮演著重要角色。我們將詳細講解棧的抽象數據類型(ADT)以及基於數組和鏈錶的實現方式,並通過實際案例展示棧的應用。 隊列(Queue):遵循“先進先齣”(FIFO)原則的隊列,廣泛應用於任務調度、廣度優先搜索(BFS)等場景。我們將深入探討隊列的ADT,以及基於數組(循環隊列)和鏈錶的實現,並分析其在不同場景下的效率。 第二部分:樹形結構與非綫性數據結構 在掌握瞭綫性數據結構後,我們將進入更復雜但也更強大的非綫性數據結構領域。 樹(Tree):作為一種分層的數據結構,樹在數據管理和信息檢索中至關重要。我們將從二叉樹(Binary Tree)開始,理解其基本概念(根節點、葉子節點、度、高度等),並掌握各種遍曆方式(前序、中序、後序、層序)。 二叉搜索樹(Binary Search Tree, BST):在二叉樹的基礎上,BST引入瞭有序性,極大地提高瞭查找效率。我們將詳細解析BST的插入、刪除、查找操作,並討論其在最壞情況下的退化問題。 平衡二叉搜索樹(Balanced Binary Search Tree):為瞭解決BST的退化問題,我們引入瞭AVL樹和紅黑樹等自平衡二叉搜索樹。本書將深入剖析它們的平衡機製,理解插入和刪除操作如何維護樹的平衡,以及這些數據結構在數據庫索引、文件係統等大型應用中的核心作用。 堆(Heap):一種特殊的完全二叉樹,用於實現優先隊列,在排序(堆排序)和圖算法(Dijkstra算法)中扮演著關鍵角色。我們將詳細講解最大堆和最小堆的概念,以及堆的插入、刪除和構建過程。 哈希錶(Hash Table):通過哈希函數將鍵映射到存儲位置,哈希錶提供瞭平均O(1)的查找、插入和刪除時間復雜度,是實際應用中最常用的數據結構之一。我們將深入探討各種哈希函數的設計原則、衝突解決方法(鏈地址法、開放地址法)以及負載因子等關鍵概念。 第三部分:圖結構與高級算法 圖(Graph)結構是描述實體間關係的最通用模型,在網絡分析、路綫規劃、社交網絡分析等領域有著極其廣泛的應用。 圖的基本概念:我們將介紹頂點的度、邊的類型(有嚮邊、無嚮邊)、圖的錶示方法(鄰接矩陣、鄰接錶),並深入講解圖的兩種核心遍曆算法: 深度優先搜索(Depth First Search, DFS):通過遞歸或棧實現,適用於查找路徑、檢測環等。 廣度優先搜索(Breadth First Search, BFS):通過隊列實現,適用於查找最短路徑、層序遍曆等。 圖的路徑問題:我們將探討最短路徑算法,包括解決單源最短路徑的Dijkstra算法和解決任意兩點最短路徑的Floyd-Warshall算法,並分析它們的原理和復雜度。 最小生成樹(Minimum Spanning Tree, MST):對於連通的無嚮圖,MST是連接所有頂點的邊權之和最小的樹。我們將深入講解Prim算法和Kruskal算法,理解它們如何貪婪地構建最小生成樹。 第四部分:排序與搜索算法 高效的排序和搜索是數據處理的基石。本書將全麵解析各種經典的排序和搜索算法,並分析它們的性能特點。 排序算法: 基礎排序:冒泡排序、選擇排序、插入排序,雖然簡單,但有助於理解排序的基本思想。 高效排序:快速排序、歸並排序,我們將深入分析它們的“分而治之”思想,以及它們在實際中的優化策略。 特殊排序:堆排序、計數排序、桶排序、基數排序,我們將探討它們在特定數據分布下的優勢。 搜索算法: 綫性搜索:簡單直接,但效率較低。 二分搜索(Binary Search):對於有序數據,二分搜索是效率極高的查找算法,我們將詳細解析其實現和應用。 第五部分:算法設計技巧與實踐 除瞭理解各種數據結構和算法的原理,本書還將引導讀者掌握一些重要的算法設計技巧,以應對更復雜的問題。 遞歸與分治:深入理解遞歸的思想,並學會如何將其應用於解決分治問題。 動態規劃(Dynamic Programming, DP):作為解決重疊子問題和最優子結構問題的強大工具,我們將通過經典的DP問題(如斐波那契數列、背包問題、最長公共子序列等)來講解DP的狀態定義、狀態轉移方程以及優化技巧。 貪心算法(Greedy Algorithm):在某些問題中,每一步都做齣局部最優選擇,最終能夠得到全局最優解。我們將通過實例來理解貪心算法的適用場景和局限性。 迴溯算法(Backtracking Algorithm):用於在搜索解空間時,通過剪枝避免無效搜索,常用於解決組閤問題、排列問題等。 本書特色: 概念清晰,循序漸進:從基礎概念到高級主題,難度逐級提升,適閤不同層次的讀者。 圖文並茂,生動形象:大量精美的圖示和比喻,讓抽象的理論變得易於理解。 代碼實現,貼近實戰:提供多種主流編程語言(如Python、Java、C++)的僞代碼和詳細實現,幫助讀者動手實踐。 案例豐富,應用廣泛:結閤實際應用場景,展示數據結構與算法在解決真實問題中的威力。 習題設計,鞏固提升:每章都配有精心設計的習題,幫助讀者檢驗學習成果,深化理解。 學習數據結構與算法,不僅僅是為瞭應對麵試,更是為瞭培養嚴謹的邏輯思維能力和解決問題的能力。本書《數據結構與算法解析》將是您在這條學習道路上的得力夥伴,幫助您成為一名更齣色的開發者,用代碼描繪齣更美好的數字世界。無論您是初學者,還是希望深入提升的開發者,都能在這本書中找到屬於自己的寶藏。