現(xiàn)實世界中的數(shù)據(jù)往往并不是能以行列形式呈現(xiàn)的表格型數(shù)據(jù),而是富含關(guān)系信息的復(fù)雜網(wǎng)絡(luò)。對于挖掘這類數(shù)據(jù)的潛在價值,圖數(shù)據(jù)庫具有明顯的優(yōu)勢。本書介紹如何針對真實場景設(shè)計和實現(xiàn)圖數(shù)據(jù)庫。你將學(xué)習(xí)圖論的基礎(chǔ)知識,并嘗試構(gòu)建基于圖數(shù)據(jù)庫的社交網(wǎng)絡(luò)應(yīng)用程序和推薦引擎等。你將掌握圖數(shù)據(jù)庫開發(fā)的所有重要概念,包括遞歸遍歷、圖數(shù)據(jù)建模、查詢調(diào)優(yōu)、性能調(diào)優(yōu)、圖分析,以及如何避免超級節(jié)點等反模式。學(xué)完本書后,你將有能力構(gòu)建基于圖數(shù)據(jù)庫的應(yīng)用程序,從而顯著地提升數(shù)據(jù)價值。本書
示例采用開源圖計算框架TinkerPop及其查詢語言Gremlin,但所述概念均適用于Neo4j等基于Cypher的圖數(shù)據(jù)庫。
【作者簡介】 戴夫·貝克伯杰(Dave Bechberger) AWS圖架構(gòu)師,在分布式數(shù)據(jù)架構(gòu)方面擁有豐富經(jīng)驗,受邀在各種國際會議上發(fā)表了大量與圖技術(shù)相關(guān)的演講。 喬希·佩里曼(Josh Perryman) 數(shù)據(jù)架構(gòu)師,擁有20余年的復(fù)雜系統(tǒng)構(gòu)建和維護經(jīng)驗,近年來專注于圖數(shù)據(jù)庫在分布式環(huán)境中的應(yīng)用。工作之余,他還設(shè)計了惠及全球?qū)W生的Gremlin培訓(xùn)課程。 【譯者簡介】 葉偉民 曾在美國舊金山工作,是神機妙算Fintech信息匯總站長和主要開發(fā)人員,另譯有《.NET并發(fā)編程實戰(zhàn)》《.NET內(nèi)存管理寶典》等書。 劉華 匯豐軟件開發(fā)(廣東)有限公司(匯豐科技中國)云平臺工程主管,著有《獵豹行動:硝煙中的敏捷轉(zhuǎn)型之旅》和《軟件交付那些事兒》,有20年的軟件開發(fā)經(jīng)驗,以及16年的項目和團隊管理經(jīng)驗。阿里云、谷歌云認(rèn)證架構(gòu)師,熟悉知識圖譜、圖數(shù)據(jù)庫、Gremlin,曾在GDevOps、中國DevOps社區(qū)、中國軟件技術(shù)大會、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 小結(jié) 19
第 2章 圖數(shù)據(jù)建!20
2.1 數(shù)據(jù)建模過程 20
2.1.1 數(shù)據(jù)建模術(shù)語 21
2.1.2 數(shù)據(jù)建模的四個步驟 22
2.2 理解問題 23
2.2.1 關(guān)于領(lǐng)域和范圍的疑問 24
2.2.2 關(guān)于業(yè)務(wù)實體的疑問 25
2.2.3 關(guān)于功能的疑問 26
2.3 構(gòu)建概念數(shù)據(jù)模型 27
2.3.1 對實體進行識別和歸類 27
2.3.2 識別實體間的關(guān)系 28
2.4 構(gòu)建邏輯數(shù)據(jù)模型 30
2.4.1 將實體轉(zhuǎn)換為頂點 32
2.4.2 將關(guān)系轉(zhuǎn)換為邊 34
2.4.3 尋找并分配屬性 42
2.5 檢查模型 43
2.6 小結(jié) 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 小結(jié) 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 在路徑結(jié)果中包括邊 91
4.3.4 實現(xiàn)邊的計數(shù)和反規(guī)范化 92
4.4 小結(jié) 93
第5章 格式化結(jié)果 94
5.1 回顧值操作 94
5.2 構(gòu)建結(jié)果 99
5.2.1 在Gremlin中應(yīng)用別名 101
5.2.2 投射結(jié)果而不應(yīng)用別名 106
5.3 對結(jié)果進行組織 110
5.3.1 對圖遍歷返回的結(jié)果排序 110
5.3.2 對圖遍歷返回的結(jié)果分組 112
5.3.3 限制結(jié)果記錄的數(shù)量 114
5.4 將操作組合成復(fù)雜的遍歷 115
5.5 小結(jié) 119
第6章 開發(fā)應(yīng)用程序 120
6.1 開始項目 121
6.1.1 選擇工具 121
6.1.2 設(shè)置項目 122
6.1.3 選擇驅(qū)動程序 122
6.1.4 準(zhǔn)備數(shù)據(jù)庫服務(wù)器實例 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 在應(yīng)用程序中創(chuàng)建Java方法 132
6.4.1 添加頂點 132
6.4.2 添加邊 133
6.4.3 修改屬性 135
6.4.4 刪除元素 136
6.5 轉(zhuǎn)換清單和路徑遍歷 138
6.5.1 獲取結(jié)果的清單 138
6.5.2 實現(xiàn)遞歸遍歷 139
6.5.3 實現(xiàn)路徑 140
6.6 小結(jié) 141
第二部分 使用圖數(shù)據(jù)庫構(gòu)建應(yīng)用程序
第7章 高級數(shù)據(jù)建模技術(shù) 144
7.1 回顧當(dāng)前數(shù)據(jù)模型 145
7.2 擴展邏輯數(shù)據(jù)模型 146
7.3 將實體轉(zhuǎn)換為頂點 148
7.3.1 使用通用標(biāo)簽 149
7.3.2 反規(guī)范化圖數(shù)據(jù) 154
7.3.3 將關(guān)系轉(zhuǎn)換為邊 158
7.3.4 查找和分配屬性 160
7.3.5 將屬性移到邊 160
7.3.6 檢查模型 163
7.4 針對個性化用例擴展數(shù)據(jù)模型 163
7.5 比較結(jié)果 165
7.6 小結(jié) 166
第8章 使用熟路構(gòu)建遍歷 167
8.1 開發(fā)遍歷的準(zhǔn)備工作 168
8.1.1 識別所需的元素 168
8.1.2 選擇起點 171
8.1.3 準(zhǔn)備測試數(shù)據(jù) 172
8.2 編寫第 一個遍歷 173
8.2.1 設(shè)計遍歷 174
8.2.2 開發(fā)遍歷代碼 176
8.3 分頁和圖數(shù)據(jù)庫 180
8.3.1 調(diào)用range()前為輸入排序的重要性 181
8.3.2 排序是昂貴的操作 182
8.4 推薦評分的餐廳 184
8.4.1 設(shè)計遍歷 184
8.4.2 開發(fā)遍歷代碼 186
8.5 編寫后的推薦引擎遍歷 194
8.5.1 設(shè)計遍歷 196
8.5.2 添加遍歷到應(yīng)用程序中 198
8.6 小結(jié) 199
第9章 子圖 200
9.1 使用子圖 201
9.1.1 提取子圖 201
9.1.2 遍歷子圖 206
9.2 針對個性化用例構(gòu)建子圖 208
9.3 構(gòu)建遍歷 213
9.3.1 反轉(zhuǎn)遍歷方向 214
9.3.2 計算子圖各自的結(jié)果 215
9.4 連接服務(wù)器的子圖 217
9.4.1 使用TinkerPop的Client連接集群 217
9.4.2 將遍歷添加到應(yīng)用程序中 219
9.5 小結(jié) 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ù)有關(guān) 227
10.2.2 和數(shù)據(jù)庫有關(guān) 228
10.2.3 什么導(dǎo)致了超級節(jié)點 228
10.2.4 監(jiān)控超級節(jié)點 229
10.2.5 有超級節(jié)點怎么辦 230
10.3 應(yīng)用程序的反模式 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 使用沒有標(biāo)簽的篩選操作 241
第 11章 下一段旅程:圖分析、機器學(xué)習(xí)和資源 242
11.1 圖分析 242
11.1.1 尋路 243
11.1.2 中心性 245
11.1.3 群體檢測 247
11.1.4 圖和機器學(xué)習(xí) 250
11.1.5 其他資源 251
11.2 寫在后 253
11.3 小結(jié) 253
附錄Apache TinkerPop概述和安裝 254