現(xiàn)實世界中的數(shù)據(jù)往往并不是能以行列形式呈現(xiàn)的表格型數(shù)據(jù),而是富含關系信息的復雜網絡。對于挖掘這類數(shù)據(jù)的潛在價值,圖數(shù)據(jù)庫具有明顯的優(yōu)勢。本書介紹如何針對真實場景設計和實現(xiàn)圖數(shù)據(jù)庫。你將學習圖論的基礎知識,并嘗試構建基于圖數(shù)據(jù)庫的社交網絡應用程序和推薦引擎等。你將掌握圖數(shù)據(jù)庫開發(fā)的所有重要概念,包括遞歸遍歷、圖數(shù)據(jù)建模、查詢調優(yōu)、性能調優(yōu)、圖分析,以及如何避免超級節(jié)點等反模式。學完本書后,你將有能力構建基于圖數(shù)據(jù)庫的應用程序,從而顯著地提升數(shù)據(jù)價值。本書
示例采用開源圖計算框架TinkerPop及其查詢語言Gremlin,但所述概念均適用于Neo4j等基于Cypher的圖數(shù)據(jù)庫。
【作者簡介】 戴夫·貝克伯杰(Dave Bechberger) AWS圖架構師,在分布式數(shù)據(jù)架構方面擁有豐富經驗,受邀在各種國際會議上發(fā)表了大量與圖技術相關的演講。 喬希·佩里曼(Josh Perryman) 數(shù)據(jù)架構師,擁有20余年的復雜系統(tǒng)構建和維護經驗,近年來專注于圖數(shù)據(jù)庫在分布式環(huán)境中的應用。工作之余,他還設計了惠及全球學生的Gremlin培訓課程。 【譯者簡介】 葉偉民 曾在美國舊金山工作,是神機妙算Fintech信息匯總站長和主要開發(fā)人員,另譯有《.NET并發(fā)編程實戰(zhàn)》《.NET內存管理寶典》等書。 劉華 匯豐軟件開發(fā)(廣東)有限公司(匯豐科技中國)云平臺工程主管,著有《獵豹行動:硝煙中的敏捷轉型之旅》和《軟件交付那些事兒》,有20年的軟件開發(fā)經驗,以及16年的項目和團隊管理經驗。阿里云、谷歌云認證架構師,熟悉知識圖譜、圖數(shù)據(jù)庫、Gremlin,曾在GDevOps、中國DevOps社區(qū)、中國軟件技術大會、ArchSummit、Top 100等論壇發(fā)表過主題演講。敏于思 捷于行博主。
第 一部分 圖數(shù)據(jù)庫入門
第 1章 初識圖 2
1.1 什么是圖 3
1.1.1 什么是圖數(shù)據(jù)庫 4
1.1.2 與其他類型數(shù)據(jù)庫的比較 5
1.1.3 為什么不能使用SQL 6
1.2 我的問題適合用圖數(shù)據(jù)庫嗎 13
1.2.1 探究疑問 14
1.2.2 如果仍無法確定 16
1.3 小結 19
第 2章 圖數(shù)據(jù)建模 20
2.1 數(shù)據(jù)建模過程 20
2.1.1 數(shù)據(jù)建模術語 21
2.1.2 數(shù)據(jù)建模的四個步驟 22
2.2 理解問題 23
2.2.1 關于領域和范圍的疑問 24
2.2.2 關于業(yè)務實體的疑問 25
2.2.3 關于功能的疑問 26
2.3 構建概念數(shù)據(jù)模型 27
2.3.1 對實體進行識別和歸類 27
2.3.2 識別實體間的關系 28
2.4 構建邏輯數(shù)據(jù)模型 30
2.4.1 將實體轉換為頂點 32
2.4.2 將關系轉換為邊 34
2.4.3 尋找并分配屬性 42
2.5 檢查模型 43
2.6 小結 44
第3章 基本遍歷和遞歸遍歷 45
3.1 建立開發(fā)環(huán)境 45
3.1.1 啟動Gremlin Server 46
3.1.2 啟動Gremlin Console,連接Gremlin Server,加載數(shù)據(jù) 46
3.2 遍歷圖 47
3.2.1 使用邏輯數(shù)據(jù)模型(模式)來規(guī)劃遍歷 48
3.2.2 通過圖數(shù)據(jù)來計劃操作 49
3.2.3 遍歷圖的基本概念 51
3.2.4 使用Gremlin編寫遍歷 52
3.2.5 使用值操作檢索屬性 56
3.3 遞歸遍歷 57
3.3.1 使用遞歸邏輯 57
3.3.2 使用Gremlin編寫遞歸遍歷 60
3.4 小結 66
第4章 尋路遍歷與圖變異 67
4.1 圖變異 68
4.1.1 添加頂點和邊 69
4.1.2 從圖中刪除數(shù)據(jù) 72
4.1.3 修改圖 73
4.1.4 擴展圖 79
4.2 路徑 82
4.2.1 圖中的環(huán) 83
4.2.2 查找簡單路徑 85
4.3 遍歷和篩選邊 86
4.3.1 遍歷邊的E操作和V操作 86
4.3.2 通過屬性篩選邊 90
4.3.3 在路徑結果中包括邊 91
4.3.4 實現(xiàn)邊的計數(shù)和反規(guī)范化 92
4.4 小結 93
第5章 格式化結果 94
5.1 回顧值操作 94
5.2 構建結果 99
5.2.1 在Gremlin中應用別名 101
5.2.2 投射結果而不應用別名 106
5.3 對結果進行組織 110
5.3.1 對圖遍歷返回的結果排序 110
5.3.2 對圖遍歷返回的結果分組 112
5.3.3 限制結果記錄的數(shù)量 114
5.4 將操作組合成復雜的遍歷 115
5.5 小結 119
第6章 開發(fā)應用程序 120
6.1 開始項目 121
6.1.1 選擇工具 121
6.1.2 設置項目 122
6.1.3 選擇驅動程序 122
6.1.4 準備數(shù)據(jù)庫服務器實例 123
6.2 連接數(shù)據(jù)庫 124
6.2.1 集群配置 124
6.2.2 建立GraphTraversal Source 125
6.3 獲取數(shù)據(jù) 127
6.3.1 獲取一個頂點 128
6.3.2 使用Gremlin語言變體 129
6.3.3 增加終點操作 130
6.3.4 在應用程序中創(chuàng)建Java方法 132
6.4.1 添加頂點 132
6.4.2 添加邊 133
6.4.3 修改屬性 135
6.4.4 刪除元素 136
6.5 轉換清單和路徑遍歷 138
6.5.1 獲取結果的清單 138
6.5.2 實現(xiàn)遞歸遍歷 139
6.5.3 實現(xiàn)路徑 140
6.6 小結 141
第二部分 使用圖數(shù)據(jù)庫構建應用程序
第7章 高級數(shù)據(jù)建模技術 144
7.1 回顧當前數(shù)據(jù)模型 145
7.2 擴展邏輯數(shù)據(jù)模型 146
7.3 將實體轉換為頂點 148
7.3.1 使用通用標簽 149
7.3.2 反規(guī)范化圖數(shù)據(jù) 154
7.3.3 將關系轉換為邊 158
7.3.4 查找和分配屬性 160
7.3.5 將屬性移到邊 160
7.3.6 檢查模型 163
7.4 針對個性化用例擴展數(shù)據(jù)模型 163
7.5 比較結果 165
7.6 小結 166
第8章 使用熟路構建遍歷 167
8.1 開發(fā)遍歷的準備工作 168
8.1.1 識別所需的元素 168
8.1.2 選擇起點 171
8.1.3 準備測試數(shù)據(jù) 172
8.2 編寫第 一個遍歷 173
8.2.1 設計遍歷 174
8.2.2 開發(fā)遍歷代碼 176
8.3 分頁和圖數(shù)據(jù)庫 180
8.3.1 調用range()前為輸入排序的重要性 181
8.3.2 排序是昂貴的操作 182
8.4 推薦評分的餐廳 184
8.4.1 設計遍歷 184
8.4.2 開發(fā)遍歷代碼 186
8.5 編寫后的推薦引擎遍歷 194
8.5.1 設計遍歷 196
8.5.2 添加遍歷到應用程序中 198
8.6 小結 199
第9章 子圖 200
9.1 使用子圖 201
9.1.1 提取子圖 201
9.1.2 遍歷子圖 206
9.2 針對個性化用例構建子圖 208
9.3 構建遍歷 213
9.3.1 反轉遍歷方向 214
9.3.2 計算子圖各自的結果 215
9.4 連接服務器的子圖 217
9.4.1 使用TinkerPop的Client連接集群 217
9.4.2 將遍歷添加到應用程序中 219
9.5 小結 219
第三部分 進階
第 10章 性能、陷阱和反模式 222
10.1 執(zhí)行緩慢的遍歷 222
10.1.1 解釋遍歷 223
10.1.2 分析遍歷 224
10.1.3 索引 226
10.2 處理超級節(jié)點 227
10.2.1 和實例數(shù)據(jù)有關 227
10.2.2 和數(shù)據(jù)庫有關 228
10.2.3 什么導致了超級節(jié)點 228
10.2.4 監(jiān)控超級節(jié)點 229
10.2.5 有超級節(jié)點怎么辦 230
10.3 應用程序的反模式 234
10.3.1 對非圖用例使用圖 234
10.3.2 臟數(shù)據(jù) 235
10.3.3 缺乏充分的測試 236
10.4 遍歷反模式 237
10.4.1 不使用參數(shù)化的遍歷 237
10.4.2 使用沒有標簽的篩選操作 241
第 11章 下一段旅程:圖分析、機器學習和資源 242
11.1 圖分析 242
11.1.1 尋路 243
11.1.2 中心性 245
11.1.3 群體檢測 247
11.1.4 圖和機器學習 250
11.1.5 其他資源 251
11.2 寫在后 253
11.3 小結 253
附錄Apache TinkerPop概述和安裝 254