本書系統(tǒng)地介紹了圖數(shù)據(jù)庫(kù)的歷史由來(lái)、建模方法、工作原理和一些真實(shí)的用戶用例,詳細(xì)地說(shuō)明了圖數(shù)據(jù)解決的是什么樣的問題,并以Neo4j數(shù)據(jù)庫(kù)和Cypher查詢語(yǔ)言為例,闡述了圖數(shù)據(jù)庫(kù)的建模方法和領(lǐng)域用例,還介紹了圖數(shù)據(jù)庫(kù)的工作原理以及一些實(shí)用的圖論算法。
本書適合開發(fā)人員和數(shù)據(jù)庫(kù)管理人員了解和學(xué)習(xí)圖數(shù)據(jù)庫(kù)時(shí)閱讀,作為一門新的知識(shí)和獨(dú)特的數(shù)據(jù)庫(kù)領(lǐng)域來(lái)拓寬視野,也適合提供解決方案的負(fù)責(zé)人了解行業(yè)動(dòng)向和新的解決問題的方式。通過(guò)閱讀本書,讀者可以對(duì)圖數(shù)據(jù)庫(kù)這一領(lǐng)域有一個(gè)透徹的了解。
世界上的大部分領(lǐng)域?qū)嶋H上都可以建模成圖,而軟件開發(fā)人員或是數(shù)據(jù)庫(kù)管理人員卻在辛辛苦苦地將這些圖轉(zhuǎn)化成關(guān)系型數(shù)據(jù)庫(kù)中的表。想象一下,假如你再也不用去做這樣的轉(zhuǎn)化,假如數(shù)據(jù)庫(kù)的遷移可以變得輕松簡(jiǎn)單,你愿意去接受一個(gè)全新的數(shù)據(jù)庫(kù)嗎?圖數(shù)據(jù)庫(kù)就是這樣一個(gè)完全不同于關(guān)系型數(shù)據(jù)庫(kù)的新型數(shù)據(jù)庫(kù),它處理的是大規(guī)模的數(shù)據(jù)和不斷變化的需求。
本書的三位作者均為Neo4j Technology公司的技術(shù)高手,他們對(duì)圖數(shù)據(jù)庫(kù)及其解決方案有豐富的經(jīng)驗(yàn),其中一位甚至還是Neo4j圖數(shù)據(jù)庫(kù)的聯(lián)合創(chuàng)始人。
本書揭秘圖數(shù)據(jù)庫(kù)是如何幫你管理和查詢高度關(guān)聯(lián)的數(shù)據(jù)的。有了這本實(shí)用的書,你將會(huì)學(xué)到如何設(shè)計(jì)和實(shí)施圖數(shù)據(jù)庫(kù),在廣泛的問題域中展現(xiàn)“圖”的力量。無(wú)論你是想更快地響應(yīng)用戶查詢,還是想構(gòu)建快速適應(yīng)業(yè)務(wù)發(fā)展的數(shù)據(jù)庫(kù),這本書都會(huì)向你將無(wú)模式(schema-free)的圖模型應(yīng)用于實(shí)際問題的具體方法。
閱讀這本書,你還可以學(xué)到不同的組織是如何使用圖數(shù)據(jù)庫(kù)擊敗其競(jìng)爭(zhēng)對(duì)手的。有了本書中的數(shù)據(jù)建模、查詢和代碼示例,你很快就能實(shí)現(xiàn)一個(gè)自己的解決方案。
第1章 簡(jiǎn)介 1
1.1 圖是什么 1
1.2 圖領(lǐng)域概覽 3
1.2.1 圖數(shù)據(jù)庫(kù) 4
1.2.2 圖計(jì)算引擎 6
1.3 圖數(shù)據(jù)庫(kù)的威力 7
1.3.1 性能 7
1.3.2 靈活性 7
1.3.3 敏捷性 7
1.4 小結(jié) 8
第2章 關(guān)聯(lián)數(shù)據(jù)的存儲(chǔ)選擇 9
2.1 關(guān)系型數(shù)據(jù)庫(kù)缺少聯(lián)系 9
2.2 NoSQL數(shù)據(jù)庫(kù)也缺少聯(lián)系 12
2.3 圖數(shù)據(jù)庫(kù)擁抱聯(lián)系 15
2.4 小結(jié) 20
第3章 使用圖進(jìn)行數(shù)據(jù)建模 21
3.1 模型和目標(biāo) 21
3.2 帶標(biāo)簽的屬性圖模型 22
3.3 查詢圖:Cypher簡(jiǎn)介 23
3.3.1 Cypher的理念 23
3.3.2 MATCH 25
3.3.3 RETURN 26
3.3.4 其他Cypher子句 26
3.4 關(guān)系建模和圖建模對(duì)比 27
3.4.1 系統(tǒng)管理領(lǐng)域中的關(guān)系建!29
3.4.2 系統(tǒng)管理領(lǐng)域中的圖建模 32
3.4.3 測(cè)試模型 34
3.5 跨域模型 35
3.5.1 創(chuàng)建莎士比亞圖 38
3.5.2 開始查詢 40
3.5.3 聲明查找的信息模式 41
3.5.4 約束匹配 42
3.5.5 處理結(jié)果 43
3.5.6 查詢鏈 44
3.6 建模時(shí)常見的陷阱 45
3.6.1 電子郵件起源問題域 45
3.6.2 敏感的第一個(gè)迭代 45
3.6.3 第二次的魅力 47
3.6.4 發(fā)展中的領(lǐng)域 50
3.7 辨別節(jié)點(diǎn)和聯(lián)系 55
3.8 避免反模式 55
3.9 小結(jié) 56
第4章 構(gòu)建基于圖數(shù)據(jù)庫(kù)的應(yīng)用 57
4.1 數(shù)據(jù)建!57
4.1.1 根據(jù)應(yīng)用程序的需要描述模型 57
4.1.2 用節(jié)點(diǎn)表示事物,用聯(lián)系表示結(jié)構(gòu) 58
4.1.3 細(xì)粒度聯(lián)系與通用聯(lián)系 59
4.1.4 將事實(shí)建模為節(jié)點(diǎn) 59
4.1.5 將復(fù)雜的值類型表示為節(jié)點(diǎn) 62
4.1.6 時(shí)間 62
4.1.7 迭代開發(fā)和增量開發(fā) 65
4.2 應(yīng)用程序架構(gòu) 66
4.2.1 嵌入式與服務(wù)器 66
4.2.2 集群 71
4.2.3 負(fù)載均衡 71
4.3 測(cè)試 74
4.3.1 測(cè)試驅(qū)動(dòng)的數(shù)據(jù)模型開發(fā) 74
4.3.2 性能測(cè)試 80
4.4 容量規(guī)劃 83
4.4.1 優(yōu)化條件 84
4.4.2 性能 84
4.4.3 冗余 86
4.4.4 負(fù)載 86
4.5 導(dǎo)入和批量加載數(shù)據(jù) 87
4.5.1 初始導(dǎo)入 87
4.5.2 批量導(dǎo)入 88
4.6 小結(jié) 91
第5章 現(xiàn)實(shí)世界中的圖 92
5.1 為什么選擇圖 92
5.2 常見用例 93
5.2.1 社交 93
5.2.2 推薦 94
5.2.3 地理空間 95
5.2.4 主數(shù)據(jù)管理 95
5.2.5 網(wǎng)絡(luò)和數(shù)據(jù)中心管理 95
5.2.6 授權(quán)和訪問控制(通信) 96
5.3 實(shí)際示例 97
5.3.1 社交推薦(專業(yè)社交網(wǎng)絡(luò)) 97
5.3.2 授權(quán)和訪問控制 107
5.3.3 地理空間和物流 115
5.4 小結(jié) 127
第6章 圖數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu) 128
6.1 原生圖處理 128
6.2 原生圖存儲(chǔ) 131
6.3 用于編程的API 135
6.3.1 內(nèi)核API 136
6.3.2 核心API 136
6.3.3 遍歷框架 137
6.4 非功能型特性 139
6.4.1 事務(wù) 139
6.4.2 可恢復(fù)性 140
6.4.3 可用性 141
6.4.4 可擴(kuò)展性 142
6.5 小結(jié) 145
第7章 使用圖論預(yù)分析 146
7.1 深度優(yōu)先搜索和廣度優(yōu)先搜索 146
7.2 使用Dijkstra算法尋找路徑 147
7.3 A*算法 155
7.4 圖論和預(yù)測(cè)建模 155
7.4.1 三元閉包 156
7.4.2 結(jié)構(gòu)平衡 158
7.5 局部橋 161
7.6 小結(jié) 163
附錄 NoSQL概覽 164