陳韶健 著
Neo4j是一個獨立、高性能的NoSQL圖數(shù)據(jù)庫,從總體來看,Neo4j就是由無數(shù)相互關(guān)聯(lián)的節(jié)點所組成的圖形,它能很好且形象地表現(xiàn)出現(xiàn)世界中相互聯(lián)系的事物。
《Neo4j全棧開發(fā)》不僅全面系統(tǒng)地介紹了怎樣以簡單易用的方式來使用Neo4j,還詳細(xì)講解了構(gòu)建可擴展、高可用的Neo4j分布式架構(gòu)的實操細(xì)節(jié),最后使用SpringBoot開發(fā)框架,結(jié)合具體的應(yīng)用實例,詳細(xì)闡述了使用Neo4j進(jìn)行前后端設(shè)計的詳細(xì)過程和方法,從此讓Neo4j提供全天候、無間斷的高可靠服務(wù)。
《Neo4j全棧開發(fā)》全面、系統(tǒng)地介紹了Neo4j這個獨特而又高性能的NoSQL圖數(shù)據(jù)庫,從使用Neo4j進(jìn)行程序開發(fā),到Neo4j的管理和配置等層面全方位地闡釋了Neo4j的整個生態(tài)體系。
《Neo4j全棧開發(fā)》不僅著重介紹了怎樣以簡單易用的方式來使用Neo4j,更難能可貴的是,《Neo4j全棧開發(fā)》還分享了使用分布式Neo4j構(gòu)建高可用的讀/寫分離負(fù)載均衡配置的實際操作過程和實現(xiàn)細(xì)節(jié)。
通過對《Neo4j全棧開發(fā)》的學(xué)習(xí),讀者將系統(tǒng)地掌握Neo4j的知識,并很快將其用于項目開發(fā)之中,為自己的應(yīng)用提升訪問性能,解決燃眉之急。
陳韶健,具有15年以上的IT從業(yè)經(jīng)驗的資深專家。在編輯語言使用上,精通.Net和Java兩大體系,尤其對Spring和SpringBoot有深入研究,并著有《深入實踐SpringBoot》一書,于2016年11月在機械工業(yè)出版社出版。在數(shù)據(jù)庫方面,熟悉SQLServer,Oracle,MySQL等傳統(tǒng)關(guān)系型數(shù)據(jù)庫,以及Redis,MongoDB,Neo4j等NoSQL數(shù)據(jù)庫,并對Neo4j有更多的愛好和深入地研究。另外,在系統(tǒng)設(shè)計、服務(wù)器架構(gòu)設(shè)計、數(shù)據(jù)安全和性能優(yōu)化等方面都有豐富的實踐和工作經(jīng)驗。
第1章 Neo4j概述 1
1.1 Neo4j數(shù)據(jù)的特點 2
1.2 Neo4j數(shù)據(jù)的表現(xiàn)形式 2
1.3 Neo4j的優(yōu)勢 5
1.3.1 查詢的高性能 5
1.3.2 設(shè)計的靈活性 6
1.3.3 開發(fā)的敏捷性 6
1.3.4 與其他數(shù)據(jù)庫的比較 6
1.3.5 綜合表現(xiàn) 7
1.4 哪些領(lǐng)域更適合使用Neo4j 8
1.4.1 社區(qū)網(wǎng)絡(luò) 8
1.4.2 推薦引擎 9
1.4.3 交通運輸 9
1.4.4 物流管理 9
1.4.5 主數(shù)據(jù)管理 10
1.4.6 訪問控制 10
1.4.7 欺詐檢測 10
1.5 哪些領(lǐng)域不適合使用Neo4j 10
1.6 哪些企業(yè)在使用Neo4j 11
1.6.1 阿迪達(dá)斯的購物網(wǎng)站 12
1.6.2 沃爾瑪?shù)膬?nèi)部管理系統(tǒng) 12
1.6.3 eBay的電子商務(wù) 13
1.7 豐富的學(xué)習(xí)資源 13
1.7.1 精選的GraphGists 13
1.7.2 GraphGists門戶 15
1.8 小結(jié) 16
第2章 Neo4j API應(yīng)用 18
2.1 創(chuàng)建項目工程 18
2.1.1 項目工程配置 19
2.1.2 引用Neo4j開發(fā)包 19
2.2 使用Neo4j API 20
2.2.1 使用嵌入式數(shù)據(jù)庫 20
2.2.2 創(chuàng)建節(jié)點和關(guān)系 21
2.2.3 查詢及更新 22
2.2.4 刪除關(guān)系和節(jié)點 23
2.3 使用標(biāo)簽 25
2.4 使用索引 26
2.4.1 手動索引 26
2.4.2 模式索引 27
2.4.3 模式約束 28
2.5 圖的遍歷 31
2.5.1 廣度優(yōu)先遍歷 32
2.5.2 深度優(yōu)先遍歷 32
2.5.3 遍歷的路徑 34
2.6 使用Cypher查詢語言 37
2.7 連接Neo4j服務(wù)器 40
2.8 關(guān)于事務(wù) 42
2.8.1 Neo4j支持完整的事務(wù)管理特性 42
2.8.2 交互周期 43
2.8.3 隔離級別 44
2.8.4 關(guān)于死鎖 44
2.9 其他開發(fā)語言實例 44
2.9.1 Node.js訪問Neo4j 45
2.9.2 Python訪問Neo4j 46
2.10 小結(jié) 47
第3章 Neo4j的安裝及使用 48
3.1 安裝要求及推薦 48
3.2 安裝Neo4j服務(wù)器 49
3.2.1 下載Neo4j 49
3.2.2 在Linux操作系統(tǒng)中安裝Neo4j 50
3.2.3 在Windows操作系統(tǒng)中安裝Neo4j 51
3.3 Neo4j基本配置 52
3.4 Neo4j配置優(yōu)化 53
3.4.1 頁面高速緩存 53
3.4.2 堆大小 54
3.4.3 垃圾收集器 54
3.5 使用Neo4j的Web控制臺 55
3.5.1 使用命令行輸入框 56
3.5.2 數(shù)據(jù)庫管理信息 57
3.5.3 使用收藏夾 59
3.5.4 使用幫助手冊 63
3.5.5 使用瀏覽器同步功能 65
3.5.6 使用瀏覽器設(shè)置 67
3.5.7 關(guān)于Neo4j 68
3.6 小結(jié) 69
第4章 Cypher查詢語言簡介 71
4.1 Cypher語法基礎(chǔ) 71
4.1.1 變量定義 72
4.1.2 可用運算符 72
4.2 Cypher讀/寫查詢結(jié)構(gòu) 73
4.2.1 用CREATE創(chuàng)建節(jié)點 74
4.2.2 用CREATE創(chuàng)建關(guān)系 74
4.2.3 用MERGE創(chuàng)建節(jié)點 75
4.2.4 用MERGE創(chuàng)建關(guān)系 76
4.2.5 用SET更新數(shù)據(jù) 76
4.2.6 用DELETE刪除數(shù)據(jù) 77
4.2.7 用REMOVE移除數(shù)據(jù) 78
4.2.8 使用循環(huán)FOREACH 79
4.3 使用索引 79
4.3.1 創(chuàng)建和使用索引 80
4.3.2 刪除索引 81
4.4 使用約束 81
4.4.1 創(chuàng)建約束 81
4.4.2 刪除約束 81
4.5 使用標(biāo)簽 82
4.6 Cypher只讀查詢結(jié)構(gòu) 83
4.6.1 條件過濾WHERE 83
4.6.2 聯(lián)合查詢UNION 84
4.6.3 使用鏈接WITH 84
4.6.4 返回結(jié)果RETURN 85
4.7 使用CASE子句 86
4.8 遍歷的路徑 86
4.8.1 最短路徑 87
4.8.2 所有最短路徑 88
4.9 使用函數(shù) 90
4.10 使用CALL調(diào)用存儲過程 92
4.11 查詢語句性能分析 93
4.12 Cypher的使用范圍 95
4.12.1 在neo4j-shell中使用Cypher查詢語言 96
4.12.2 在Rest API中使用Cypher查詢語言 98
4.13 小結(jié) 101
第5章 使用SDN建模和設(shè)計存儲庫接口 103
5.1 SDN簡介 103
5.1.1 SDN的特點 103
5.1.2 SDN存儲庫接口 104
5.2 數(shù)據(jù)模型設(shè)計 105
5.2.1 用戶訪問控制數(shù)據(jù)模型 105
5.2.2 購物網(wǎng)站數(shù)據(jù)模型 106
5.3 數(shù)據(jù)建模的誤區(qū) 108
5.4 Neo4j的數(shù)據(jù)類型 109
5.5 在項目中使用SDN 110
5.5.1 在項目工程中引用SDN依賴 110
5.5.2 建模中可用的OGM注解 111
5.5.3 日期類型轉(zhuǎn)換實例 112
5.6 使用SDN建模 113
5.6.1 節(jié)點建模 113
5.6.2 關(guān)系建模 116
5.7 使用SDN設(shè)計存儲庫接口 118
5.7.1 創(chuàng)建存儲庫接口 118
5.7.2 在標(biāo)準(zhǔn)方法中使用路徑 120
5.7.3 自定義聲明方法 120
5.7.4 使用底層方法 122
5.8 SDN配置 124
5.8.1 配置域?qū)ο蠛痛鎯旖涌?125
5.8.2 使用SDN驅(qū)動連接數(shù)據(jù)庫 125
5.9 小結(jié) 127
第6章 應(yīng)用實例一:NBA季后賽預(yù)測 128
6.1 應(yīng)用背景分析 129
6.1.1 勝負(fù)預(yù)測的依據(jù) 129
6.1.2 NBA季后賽數(shù)據(jù)模型 129
6.2 實體對象建模 131
6.2.1 節(jié)點實體建模 131
6.2.2 關(guān)系實體建模 134
6.3 實體持久化和查詢設(shè)計 135
6.3.1 東部球隊存儲庫接口 136
6.3.2 西部球隊存儲庫接口 137
6.3.3 比賽存儲庫接口 138
6.3.4 贏得關(guān)系存儲庫接口 139
6.4 預(yù)測算法設(shè)計 140
6.4.1 NBA季后賽的年度歷史查詢 141
6.4.2 一支球隊的比賽歷史查詢 141
6.4.3 勝負(fù)比率排名算法 142
6.4.4 輸贏預(yù)測算法 143
6.5 SDN配置及數(shù)據(jù)庫連接 144
6.5.1 數(shù)據(jù)庫連接配置 145
6.5.2 SDN配置 145
6.6 數(shù)據(jù)庫設(shè)計驗證 146
6.7 創(chuàng)建Web應(yīng)用 149
6.8 Web前后端設(shè)計 150
6.8.1 Web后端設(shè)計 150
6.8.2 Web前端設(shè)計 154
6.9 比賽結(jié)果編輯設(shè)計 168
6.9.1 比賽結(jié)果編輯的訪問控制設(shè)計 168
6.9.2 比賽結(jié)果的錄入界面設(shè)計 171
6.10 勝率排名的Web設(shè)計 176
6.10.1 勝率排名的訪問控制設(shè)計 176
6.10.2 勝率排名的界面設(shè)計 177
6.11 輸贏預(yù)測的Web設(shè)計 180
6.11.1 輸贏預(yù)測的訪問控制設(shè)計 181
6.11.2 輸贏預(yù)測的界面設(shè)計 182
6.12 使用GraphGists的測試數(shù)據(jù) 187
6.13 實例工程使用 188
6.13.1 工程配置 189
6.13.2 運行應(yīng)用 189
6.14 小結(jié) 191
第7章 應(yīng)用實例二:電影社區(qū)推薦引擎 192
7.1 應(yīng)用背景分析 192
7.1.1 發(fā)現(xiàn)商業(yè)價值 193
7.1.2 建立數(shù)據(jù)模型 193
7.2 數(shù)據(jù)對象建模 194
7.2.1 節(jié)點建模 194
7.2.2 關(guān)系建模 199
7.3 存儲庫接口設(shè)計 201
7.3.1 影院存儲庫接口設(shè)計 201
7.3.2 電影存儲庫接口設(shè)計 202
7.3.3 節(jié)目存儲庫接口設(shè)計 203
7.3.4 觀眾存儲庫接口設(shè)計 204
7.4 Cypher查詢算法設(shè)計 204
7.4.1 電影排名查詢算法設(shè)計 205
7.4.2 電影推薦查詢算法設(shè)計 205
7.5 數(shù)據(jù)訪問服務(wù)類設(shè)計 208
7.5.1 分頁查詢公共服務(wù)類 209
7.5.2 數(shù)據(jù)訪問服務(wù)類 210
7.6 數(shù)據(jù)庫連接配置 212
7.6.1 SDN驅(qū)動的依賴引用 212
7.6.2 連接數(shù)據(jù)庫配置 213
7.6.3 SDN配置 213
7.7 數(shù)據(jù)庫設(shè)計驗證 214
7.8 Web設(shè)計 217
7.8.1 訪問控制設(shè)計 218
7.8.2 界面設(shè)計 222
7.9 電影評分的Web設(shè)計 242
7.9.1 電影評分訪問控制設(shè)計 242
7.9.2 電影評分界面設(shè)計 244
7.10 電影排名的Web設(shè)計 247
7.10.1 電影排名訪問控制設(shè)計 247
7.10.2 電影排名界面設(shè)計 248
7.11 電影推薦的Web設(shè)計 252
7.11.1 推薦電影給觀眾的Web設(shè)計 252
7.11.2 推薦電影給朋友的Web設(shè)計 257
7.12 管理后臺的導(dǎo)航欄設(shè)計 258
7.13 實例工程使用 260
7.13.1 運行配置 260
7.13.2 應(yīng)用發(fā)布 261
7.14 小結(jié) 262
第8章 Neo4j企業(yè)版安裝及使用 263
8.1 分布式服務(wù)器安裝 264
8.1.1 在不同機器上安裝分布式服務(wù)器 264
8.1.2 在同一臺機器上安裝分布式服務(wù)器 272
8.2 使用Haproxy實施負(fù)載均衡服務(wù) 275
8.2.1 普通負(fù)載均衡配置 275
8.2.2 Haproxy服務(wù)監(jiān)控 279
8.3 實現(xiàn)讀/寫分離的負(fù)載均衡服務(wù) 280
8.4 小結(jié) 284
第9章 Neo4j的數(shù)據(jù)安全及備份 286
9.1 數(shù)據(jù)的備份與恢復(fù) 286
9.1.1 數(shù)據(jù)備份 286
9.1.2 清理備份日志 288
9.1.3 數(shù)據(jù)恢復(fù) 289
9.2 數(shù)據(jù)庫安全保障 290
9.3 數(shù)據(jù)的導(dǎo)入與導(dǎo)出 290
9.3.1 使用neo4j-import導(dǎo)入數(shù)據(jù) 291
9.3.2 使用Cypher導(dǎo)入數(shù)據(jù) 294
9.3.3 導(dǎo)出數(shù)據(jù) 295
9.4 故障恢復(fù)與事務(wù)日志 297
9.5 數(shù)據(jù)庫升級 297
9.5.1 從2.x 升級到3.0.3 297
9.5.2 在3.x之間升級 299
9.6 小結(jié) 300
結(jié)束語 301
附錄A 參考資料 302
《Neo4j全棧開發(fā)》:
當(dāng)一個對象使用SDN建模之后,就可以使用SDN的存儲庫接口實現(xiàn)持久化和進(jìn)行一些數(shù)據(jù)訪問設(shè)計。通過簡單繼承SDN的存儲庫接口,就可以執(zhí)行標(biāo)準(zhǔn)的CURD操作,同時還可以按接口的規(guī)范標(biāo)準(zhǔn)聲明自定義方法,實現(xiàn)像使用查詢語言一樣的查詢設(shè)計。而所有這些方法將由SDN智能實現(xiàn),并不需要我們編寫實現(xiàn)的代碼。
另一個更具靈活性的設(shè)計是:在接口中通過注解使用自定義的Cypher查詢語句。當(dāng)然這也是由OGM的映射機制實現(xiàn)的,并且通過OGM優(yōu)化處理使查詢具有很高的效率,即提供了很好的性能表現(xiàn)。通過Cypher查詢語言,我們可以設(shè)計出復(fù)雜的查詢,以支持各種各樣的業(yè)務(wù)需求。
SDN還提供了隱式事務(wù)管理機制,即對數(shù)據(jù)庫的每一項操作,包括查找數(shù)據(jù)、保存數(shù)據(jù)等,都可以使用隱式事務(wù)管理。通過使用隱式事務(wù)管理,每一個事務(wù)都將是自動提交的,這將不再需要我們編寫任何事務(wù)管理的代碼。當(dāng)然,通過使用OGM的一些簡單注解方法,我們也可以非常靈活地按業(yè)務(wù)需求來顯式地管理事務(wù)。
……
在高速發(fā)展的互聯(lián)網(wǎng)應(yīng)用中,業(yè)務(wù)需求的頻繁變更和數(shù)據(jù)的快速增長都要求數(shù)據(jù)庫必須具有很強的適應(yīng)能力。Neo4j圖數(shù)據(jù)庫正是一個能夠適應(yīng)這種業(yè)務(wù)需求不斷變化和大規(guī)模數(shù)據(jù)增長而產(chǎn)生的數(shù)據(jù)庫,它不但具有很強的適應(yīng)能力,而且能夠自始至終保持高效的查詢性能。
現(xiàn)實世界中的一切事物都處在聯(lián)系之中,如人際關(guān)系、電腦網(wǎng)絡(luò)、地理數(shù)據(jù)、分子結(jié)構(gòu)模型等,無一不處在紛繁復(fù)雜的聯(lián)系之中。這種聯(lián)系形成了一種互相關(guān)聯(lián)的數(shù)據(jù),聯(lián)系才是數(shù)據(jù)的本質(zhì)所在。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫并不能很好地表現(xiàn)數(shù)據(jù)的聯(lián)系,而一些NoSQL(NotOnlySQL,非關(guān)系型數(shù)據(jù)庫)數(shù)據(jù)庫也不能表現(xiàn)數(shù)據(jù)之間的聯(lián)系。同樣是NoSQL的Neo4j圖數(shù)據(jù)庫是以圖的結(jié)構(gòu)形式來存儲數(shù)據(jù)的,它所存儲的就是聯(lián)系的數(shù)據(jù),是關(guān)聯(lián)數(shù)據(jù)本身。
關(guān)聯(lián)數(shù)據(jù)中的聯(lián)系本來就很復(fù)雜,若要在關(guān)系型數(shù)據(jù)庫中使用結(jié)構(gòu)化形式來表現(xiàn)這種聯(lián)系,則一般不能直接表示,處理起來既煩瑣又費事,并且隨著數(shù)據(jù)的不斷增長,其訪問性能將日趨下降。無數(shù)的開發(fā)人員和數(shù)據(jù)庫管理人員都或多或少地使用過關(guān)系型數(shù)據(jù)庫,在其應(yīng)用的規(guī)?;M(jìn)展過程中,對于數(shù)據(jù)庫的性能優(yōu)化往往捉襟見肘、陷入窘境。Neo4j沒有模式結(jié)構(gòu)的定義,也不需要這些定義,它使用非結(jié)構(gòu)化的方式來存儲關(guān)聯(lián)數(shù)據(jù),所以能夠直接表現(xiàn)數(shù)據(jù)的關(guān)聯(lián)特性。
Neo4j不管是與關(guān)系型數(shù)據(jù)庫相比,還是與其他NoSQL數(shù)據(jù)庫相比,都具有很多前所未有的優(yōu)勢,主要表現(xiàn)在以下幾個方面。
1.優(yōu)越的性能表現(xiàn)
Neo4j具有永久高效的讀取和寫入能力,這種能力與數(shù)據(jù)庫的大小無關(guān),不管是初始創(chuàng)建的數(shù)據(jù)庫,還是用了很長時間、積累了大量數(shù)據(jù)的數(shù)據(jù)庫,Neo4j始終能保持閃電般的讀/寫速度。
2.設(shè)計的靈活性
因為Neo4j沒有模式結(jié)構(gòu)定義的約束,并且由于圖結(jié)構(gòu)的自然伸展特性,都給Neo4j提供了無限廣闊的靈活設(shè)計空間,因為無論是擴展設(shè)計,還是增加數(shù)據(jù),都不會影響到原來數(shù)據(jù)的正常使用。
3.迭代的敏捷性
正是由于Neo4j的靈活設(shè)計特性及其圖結(jié)構(gòu)數(shù)據(jù)的可伸縮性等特點,使其能追上業(yè)務(wù)需求變化發(fā)展的腳步,并且能適用于頻繁迭代的敏捷開發(fā)方法。
4.安全可靠的特性
Neo4j不僅支持完整的事務(wù)管理特性,而且提供了實時在線備份功能,以及應(yīng)對災(zāi)難事故進(jìn)行日志恢復(fù)的方法,所有這些都充分說明了Neo4j是一個安全可靠的數(shù)據(jù)庫。
5.簡單易用的特性
Neo4j在使用上非常簡單,不管是使用Java開發(fā)語言,還是使用其他開發(fā)語言,如Python、Ruby、PHP、.NET、Node.js等,都能夠非常方便地訪問Neo4j。特別是SpringDataNeo4j開發(fā)包,更是提供了一整套非常簡單易用的Neo4j數(shù)據(jù)庫使用方法。
6.豐富的學(xué)習(xí)資源
Neo4j的社區(qū)版滋生了一個非常活躍的社區(qū),在這個社區(qū)中,諸多開發(fā)者提供了非常豐富的使用Neo4j的案例——GraphGists,這是學(xué)習(xí)使用Neo4j的極好資源。通過對這些GraphGists的學(xué)習(xí)和交流,不僅能拓展你的思路,更能讓你的開發(fā)工作變得更加簡單和容易,而且還能幫助你快速構(gòu)建應(yīng)用的商業(yè)模型。
7.大企業(yè)的考驗
Neo4j擁有廣大而又有實力的用戶群體,并且經(jīng)過幾年時間的運行實踐,充分驗證了它的穩(wěn)定性和健壯性。如思科、沃爾瑪、阿迪達(dá)斯等公司,都在使用Neo4j的過程中挖掘到了圖數(shù)據(jù)庫的巨大威力,并且創(chuàng)造出了蓬勃發(fā)展的商業(yè)模型。
綜上所述,使用如此優(yōu)秀的數(shù)據(jù)庫,不僅可以提升一個應(yīng)用的性能,而且可以適應(yīng)大規(guī)模的數(shù)據(jù)增長,同時還能減輕開發(fā)人員和數(shù)據(jù)庫管理人員的工作負(fù)擔(dān),給你和你的企業(yè)以及你的用戶帶來前所未有的優(yōu)越體驗。
讀者對象
本書適合所有開發(fā)人員,特別是SpringBoot開發(fā)者閱讀,同時適合數(shù)據(jù)庫管理人員和系統(tǒng)設(shè)計人員學(xué)習(xí)使用,并可作為系統(tǒng)策劃者進(jìn)行數(shù)據(jù)庫選型的參考資料。
實例代碼下載
本書各章的實例代碼下載在各個章節(jié)中都有明確說明,同時也可以通過以下網(wǎng)址選擇不同項目進(jìn)行下載或檢出:
https://github.com/mr-csj?tab=repositories
更多建議: