本書系統(tǒng)地介紹了圖數據庫的歷史由來、建模方法、工作原理和一些真實的用戶用例,詳細地說明了圖數據解決的是什么樣的問題,并以Neo4j數據庫和Cypher查詢語言為例,闡述了圖數據庫的建模方法和領域用例,還介紹了圖數據庫的工作原理以及一些實用的圖論算法。
本書適合開發(fā)人員和數據庫管理人員了解和學習圖數據庫時閱讀,作為一門新的知識和獨特的數據庫領域來拓寬視野,也適合提供解決方案的負責人了解行業(yè)動向和新的解決問題的方式。通過閱讀本書,讀者可以對圖數據庫這一領域有一個透徹的了解。
世界上的大部分領域實際上都可以建模成圖,而軟件開發(fā)人員或是數據庫管理人員卻在辛辛苦苦地將這些圖轉化成關系型數據庫中的表。想象一下,假如你再也不用去做這樣的轉化,假如數據庫的遷移可以變得輕松簡單,你愿意去接受一個全新的數據庫嗎?圖數據庫就是這樣一個完全不同于關系型數據庫的新型數據庫,它處理的是大規(guī)模的數據和不斷變化的需求。
本書的三位作者均為Neo4j Technology公司的技術高手,他們對圖數據庫及其解決方案有豐富的經驗,其中一位甚至還是Neo4j圖數據庫的聯(lián)合創(chuàng)始人。
本書揭秘圖數據庫是如何幫你管理和查詢高度關聯(lián)的數據的。有了這本實用的書,你將會學到如何設計和實施圖數據庫,在廣泛的問題域中展現(xiàn)“圖”的力量。無論你是想更快地響應用戶查詢,還是想構建快速適應業(yè)務發(fā)展的數據庫,這本書都會向你將無模式(schema-free)的圖模型應用于實際問題的具體方法。
閱讀這本書,你還可以學到不同的組織是如何使用圖數據庫擊敗其競爭對手的。有了本書中的數據建模、查詢和代碼示例,你很快就能實現(xiàn)一個自己的解決方案。
作者介紹
Ian Robinson是《REST實戰(zhàn)》(O'Reilly,2010)一書的共同作者。他是Neo科技公司的工程師,致力于開發(fā)Neo4j數據庫的分布式版本。在加入開發(fā)團隊之前,他曾任Neo科技的客戶成功總監(jiān),管理Neo的培訓、專業(yè)服務和業(yè)務支持,和客戶并肩設計和開發(fā)至關重要的圖數據庫解決方案。Ian加入Neo科技公司之前供職于ThoughtWorks,在那里,他是SOA實踐領頭人,并且是CTO全球技術顧問會的一員。Ian經常在世界范圍內的會議上貢獻關于圖數據庫技術的應用程序和RESTful企業(yè)級集成的話題。
Jim Webber博士是Neo科技公司的首席科學家,他研究新的圖數據庫并開發(fā)開源軟件。在這之前,Jim研究像Web這樣大規(guī)模的圖來建造分布式系統(tǒng),這也使得他成為REST in Practice(O’Reilly)的作者之一,在這之前他還出版過Developing Enterprise Web Services: An Architect’s Guide(Prentice Hall,2003)。Jim在開發(fā)社區(qū)很活躍,
Emil Eifrem是Neo科技公司的CEO和Neo4j項目的共同創(chuàng)始人。創(chuàng)建Neo之前,他是Windh AB的CTO,在那里他領導非常復雜的企業(yè)內容管理系統(tǒng)的信息架構開發(fā)。致力于可持續(xù)開源軟件,Emil指引Neo在提供免費軟件和商業(yè)效益之間走向平衡。Emil作為演講者和作者活躍于各種NOSQL會議。
譯者介紹
劉璐,軟件開發(fā)工程師,就職于ThoughtWorks,專注于軟件開發(fā)領域,對數據存儲領域有濃厚興趣。
梁越,前端工程師,就職于ThoughtWorks,對前后端開發(fā)都有涉獵,有在大型項目中應用圖數據庫的開發(fā)經驗。
第1章 簡介 1
1.1 圖是什么 1
1.2 圖領域概覽 3
1.2.1 圖數據庫 4
1.2.2 圖計算引擎 6
1.3 圖數據庫的威力 7
1.3.1 性能 7
1.3.2 靈活性 7
1.3.3 敏捷性 7
1.4 小結 8
第2章 關聯(lián)數據的存儲選擇 9
2.1 關系型數據庫缺少聯(lián)系 9
2.2 NoSQL數據庫也缺少聯(lián)系 12
2.3 圖數據庫擁抱聯(lián)系 15
2.4 小結 20
第3章 使用圖進行數據建模 21
3.1 模型和目標 21
3.2 帶標簽的屬性圖模型 22
3.3 查詢圖:Cypher簡介 23
3.3.1 Cypher的理念 23
3.3.2 MATCH 25
3.3.3 RETURN 26
3.3.4 其他Cypher子句 26
3.4 關系建模和圖建模對比 27
3.4.1 系統(tǒng)管理領域中的關系建!29
3.4.2 系統(tǒng)管理領域中的圖建模 32
3.4.3 測試模型 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 處理結果 43
3.5.6 查詢鏈 44
3.6 建模時常見的陷阱 45
3.6.1 電子郵件起源問題域 45
3.6.2 敏感的第一個迭代 45
3.6.3 第二次的魅力 47
3.6.4 發(fā)展中的領域 50
3.7 辨別節(jié)點和聯(lián)系 55
3.8 避免反模式 55
3.9 小結 56
第4章 構建基于圖數據庫的應用 57
4.1 數據建!57
4.1.1 根據應用程序的需要描述模型 57
4.1.2 用節(jié)點表示事物,用聯(lián)系表示結構 58
4.1.3 細粒度聯(lián)系與通用聯(lián)系 59
4.1.4 將事實建模為節(jié)點 59
4.1.5 將復雜的值類型表示為節(jié)點 62
4.1.6 時間 62
4.1.7 迭代開發(fā)和增量開發(fā) 65
4.2 應用程序架構 66
4.2.1 嵌入式與服務器 66
4.2.2 集群 71
4.2.3 負載均衡 71
4.3 測試 74
4.3.1 測試驅動的數據模型開發(fā) 74
4.3.2 性能測試 80
4.4 容量規(guī)劃 83
4.4.1 優(yōu)化條件 84
4.4.2 性能 84
4.4.3 冗余 86
4.4.4 負載 86
4.5 導入和批量加載數據 87
4.5.1 初始導入 87
4.5.2 批量導入 88
4.6 小結 91
第5章 現(xiàn)實世界中的圖 92
5.1 為什么選擇圖 92
5.2 常見用例 93
5.2.1 社交 93
5.2.2 推薦 94
5.2.3 地理空間 95
5.2.4 主數據管理 95
5.2.5 網絡和數據中心管理 95
5.2.6 授權和訪問控制(通信) 96
5.3 實際示例 97
5.3.1 社交推薦(專業(yè)社交網絡) 97
5.3.2 授權和訪問控制 107
5.3.3 地理空間和物流 115
5.4 小結 127
第6章 圖數據庫的內部結構 128
6.1 原生圖處理 128
6.2 原生圖存儲 131
6.3 用于編程的API 135
6.3.1 內核API 136
6.3.2 核心API 136
6.3.3 遍歷框架 137
6.4 非功能型特性 139
6.4.1 事務 139
6.4.2 可恢復性 140
6.4.3 可用性 141
6.4.4 可擴展性 142
6.5 小結 145
第7章 使用圖論預分析 146
7.1 深度優(yōu)先搜索和廣度優(yōu)先搜索 146
7.2 使用Dijkstra算法尋找路徑 147
7.3 A*算法 155
7.4 圖論和預測建!155
7.4.1 三元閉包 156
7.4.2 結構平衡 158
7.5 局部橋 161
7.6 小結 163
附錄 NoSQL概覽 164