Neo4j全棧開發(fā)

2021-05-12 21:38 更新

陳韶健 著

  • 出版社: 電子工業(yè)出版社
  • ISBN:9787121314476
  • 版次:1
  • 商品編碼:12087827
  • 品牌:博文視點
  • 包裝:平裝
  • 開本:16開
  • 出版時間:2017-06-01
  • 用紙:膠版紙
  • 頁數(shù):316
  • 正文語種:中文


點此購買


編輯推薦

  Neo4j是一個獨立、高性能的NoSQL圖數(shù)據(jù)庫,從總體來看,Neo4j就是由無數(shù)相互關(guān)聯(lián)的節(jié)點所組成的圖形,它能很好且形象地表現(xiàn)出現(xiàn)世界中相互聯(lián)系的事物。

  《Neo4j全棧開發(fā)》不僅全面系統(tǒng)地介紹了怎樣以簡單易用的方式來使用Neo4j,還詳細講解了構(gòu)建可擴展、高可用的Neo4j分布式架構(gòu)的實操細節(jié),最后使用SpringBoot開發(fā)框架,結(jié)合具體的應用實例,詳細闡述了使用Neo4j進行前后端設計的詳細過程和方法,從此讓Neo4j提供全天候、無間斷的高可靠服務。


內(nèi)容簡介

  《Neo4j全棧開發(fā)》全面、系統(tǒng)地介紹了Neo4j這個獨特而又高性能的NoSQL圖數(shù)據(jù)庫,從使用Neo4j進行程序開發(fā),到Neo4j的管理和配置等層面全方位地闡釋了Neo4j的整個生態(tài)體系。

  《Neo4j全棧開發(fā)》不僅著重介紹了怎樣以簡單易用的方式來使用Neo4j,更難能可貴的是,《Neo4j全棧開發(fā)》還分享了使用分布式Neo4j構(gòu)建高可用的讀/寫分離負載均衡配置的實際操作過程和實現(xiàn)細節(jié)。

  通過對《Neo4j全棧開發(fā)》的學習,讀者將系統(tǒng)地掌握Neo4j的知識,并很快將其用于項目開發(fā)之中,為自己的應用提升訪問性能,解決燃眉之急。


作者簡介

  陳韶健,具有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)設計、服務器架構(gòu)設計、數(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 設計的靈活性 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)絡 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 阿迪達斯的購物網(wǎng)站 12

1.6.2 沃爾瑪?shù)膬?nèi)部管理系統(tǒng) 12

1.6.3 eBay的電子商務 13

1.7 豐富的學習資源 13

1.7.1 精選的GraphGists 13

1.7.2 GraphGists門戶 15

1.8 小結(jié) 16

第2章 Neo4j API應用 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 使用標簽 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服務器 40

2.8 關(guān)于事務 42

2.8.1 Neo4j支持完整的事務管理特性 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服務器 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 使用瀏覽器設置 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 使用標簽 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建模和設計存儲庫接口 103

5.1 SDN簡介 103

5.1.1 SDN的特點 103

5.1.2 SDN存儲庫接口 104

5.2 數(shù)據(jù)模型設計 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設計存儲庫接口 118

5.7.1 創(chuàng)建存儲庫接口 118

5.7.2 在標準方法中使用路徑 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章 應用實例一:NBA季后賽預測 128

6.1 應用背景分析 129

6.1.1 勝負預測的依據(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 實體持久化和查詢設計 135

6.3.1 東部球隊存儲庫接口 136

6.3.2 西部球隊存儲庫接口 137

6.3.3 比賽存儲庫接口 138

6.3.4 贏得關(guān)系存儲庫接口 139

6.4 預測算法設計 140

6.4.1 NBA季后賽的年度歷史查詢 141

6.4.2 一支球隊的比賽歷史查詢 141

6.4.3 勝負比率排名算法 142

6.4.4 輸贏預測算法 143

6.5 SDN配置及數(shù)據(jù)庫連接 144

6.5.1 數(shù)據(jù)庫連接配置 145

6.5.2 SDN配置 145

6.6 數(shù)據(jù)庫設計驗證 146

6.7 創(chuàng)建Web應用 149

6.8 Web前后端設計 150

6.8.1 Web后端設計 150

6.8.2 Web前端設計 154

6.9 比賽結(jié)果編輯設計 168

6.9.1 比賽結(jié)果編輯的訪問控制設計 168

6.9.2 比賽結(jié)果的錄入界面設計 171

6.10 勝率排名的Web設計 176

6.10.1 勝率排名的訪問控制設計 176

6.10.2 勝率排名的界面設計 177

6.11 輸贏預測的Web設計 180

6.11.1 輸贏預測的訪問控制設計 181

6.11.2 輸贏預測的界面設計 182

6.12 使用GraphGists的測試數(shù)據(jù) 187

6.13 實例工程使用 188

6.13.1 工程配置 189

6.13.2 運行應用 189

6.14 小結(jié) 191

第7章 應用實例二:電影社區(qū)推薦引擎 192

7.1 應用背景分析 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 存儲庫接口設計 201

7.3.1 影院存儲庫接口設計 201

7.3.2 電影存儲庫接口設計 202

7.3.3 節(jié)目存儲庫接口設計 203

7.3.4 觀眾存儲庫接口設計 204

7.4 Cypher查詢算法設計 204

7.4.1 電影排名查詢算法設計 205

7.4.2 電影推薦查詢算法設計 205

7.5 數(shù)據(jù)訪問服務類設計 208

7.5.1 分頁查詢公共服務類 209

7.5.2 數(shù)據(jù)訪問服務類 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ù)庫設計驗證 214

7.8 Web設計 217

7.8.1 訪問控制設計 218

7.8.2 界面設計 222

7.9 電影評分的Web設計 242

7.9.1 電影評分訪問控制設計 242

7.9.2 電影評分界面設計 244

7.10 電影排名的Web設計 247

7.10.1 電影排名訪問控制設計 247

7.10.2 電影排名界面設計 248

7.11 電影推薦的Web設計 252

7.11.1 推薦電影給觀眾的Web設計 252

7.11.2 推薦電影給朋友的Web設計 257

7.12 管理后臺的導航欄設計 258

7.13 實例工程使用 260

7.13.1 運行配置 260

7.13.2 應用發(fā)布 261

7.14 小結(jié) 262

第8章 Neo4j企業(yè)版安裝及使用 263

8.1 分布式服務器安裝 264

8.1.1 在不同機器上安裝分布式服務器 264

8.1.2 在同一臺機器上安裝分布式服務器 272

8.2 使用Haproxy實施負載均衡服務 275

8.2.1 普通負載均衡配置 275

8.2.2 Haproxy服務監(jiān)控 279

8.3 實現(xiàn)讀/寫分離的負載均衡服務 280

8.4 小結(jié) 284

第9章 Neo4j的數(shù)據(jù)安全及備份 286

9.1 數(shù)據(jù)的備份與恢復 286

9.1.1 數(shù)據(jù)備份 286

9.1.2 清理備份日志 288

9.1.3 數(shù)據(jù)恢復 289

9.2 數(shù)據(jù)庫安全保障 290

9.3 數(shù)據(jù)的導入與導出 290

9.3.1 使用neo4j-import導入數(shù)據(jù) 291

9.3.2 使用Cypher導入數(shù)據(jù) 294

9.3.3 導出數(shù)據(jù) 295

9.4 故障恢復與事務日志 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ā)》:
  當一個對象使用SDN建模之后,就可以使用SDN的存儲庫接口實現(xiàn)持久化和進行一些數(shù)據(jù)訪問設計。通過簡單繼承SDN的存儲庫接口,就可以執(zhí)行標準的CURD操作,同時還可以按接口的規(guī)范標準聲明自定義方法,實現(xiàn)像使用查詢語言一樣的查詢設計。而所有這些方法將由SDN智能實現(xiàn),并不需要我們編寫實現(xiàn)的代碼。
  另一個更具靈活性的設計是:在接口中通過注解使用自定義的Cypher查詢語句。當然這也是由OGM的映射機制實現(xiàn)的,并且通過OGM優(yōu)化處理使查詢具有很高的效率,即提供了很好的性能表現(xiàn)。通過Cypher查詢語言,我們可以設計出復雜的查詢,以支持各種各樣的業(yè)務需求。
  SDN還提供了隱式事務管理機制,即對數(shù)據(jù)庫的每一項操作,包括查找數(shù)據(jù)、保存數(shù)據(jù)等,都可以使用隱式事務管理。通過使用隱式事務管理,每一個事務都將是自動提交的,這將不再需要我們編寫任何事務管理的代碼。當然,通過使用OGM的一些簡單注解方法,我們也可以非常靈活地按業(yè)務需求來顯式地管理事務。
  ……


前言/序言

  在高速發(fā)展的互聯(lián)網(wǎng)應用中,業(yè)務需求的頻繁變更和數(shù)據(jù)的快速增長都要求數(shù)據(jù)庫必須具有很強的適應能力。Neo4j圖數(shù)據(jù)庫正是一個能夠適應這種業(yè)務需求不斷變化和大規(guī)模數(shù)據(jù)增長而產(chǎn)生的數(shù)據(jù)庫,它不但具有很強的適應能力,而且能夠自始至終保持高效的查詢性能。

  現(xiàn)實世界中的一切事物都處在聯(lián)系之中,如人際關(guān)系、電腦網(wǎng)絡、地理數(shù)據(jù)、分子結(jié)構(gòu)模型等,無一不處在紛繁復雜的聯(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)系本來就很復雜,若要在關(guān)系型數(shù)據(jù)庫中使用結(jié)構(gòu)化形式來表現(xiàn)這種聯(lián)系,則一般不能直接表示,處理起來既煩瑣又費事,并且隨著數(shù)據(jù)的不斷增長,其訪問性能將日趨下降。無數(shù)的開發(fā)人員和數(shù)據(jù)庫管理人員都或多或少地使用過關(guān)系型數(shù)據(jù)庫,在其應用的規(guī)模化進展過程中,對于數(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.設計的靈活性

  因為Neo4j沒有模式結(jié)構(gòu)定義的約束,并且由于圖結(jié)構(gòu)的自然伸展特性,都給Neo4j提供了無限廣闊的靈活設計空間,因為無論是擴展設計,還是增加數(shù)據(jù),都不會影響到原來數(shù)據(jù)的正常使用。

  3.迭代的敏捷性

  正是由于Neo4j的靈活設計特性及其圖結(jié)構(gòu)數(shù)據(jù)的可伸縮性等特點,使其能追上業(yè)務需求變化發(fā)展的腳步,并且能適用于頻繁迭代的敏捷開發(fā)方法。

  4.安全可靠的特性

  Neo4j不僅支持完整的事務管理特性,而且提供了實時在線備份功能,以及應對災難事故進行日志恢復的方法,所有這些都充分說明了Neo4j是一個安全可靠的數(shù)據(jù)庫。

  5.簡單易用的特性

  Neo4j在使用上非常簡單,不管是使用Java開發(fā)語言,還是使用其他開發(fā)語言,如Python、Ruby、PHP、.NET、Node.js等,都能夠非常方便地訪問Neo4j。特別是SpringDataNeo4j開發(fā)包,更是提供了一整套非常簡單易用的Neo4j數(shù)據(jù)庫使用方法。

  6.豐富的學習資源

  Neo4j的社區(qū)版滋生了一個非?;钴S的社區(qū),在這個社區(qū)中,諸多開發(fā)者提供了非常豐富的使用Neo4j的案例——GraphGists,這是學習使用Neo4j的極好資源。通過對這些GraphGists的學習和交流,不僅能拓展你的思路,更能讓你的開發(fā)工作變得更加簡單和容易,而且還能幫助你快速構(gòu)建應用的商業(yè)模型。

  7.大企業(yè)的考驗

  Neo4j擁有廣大而又有實力的用戶群體,并且經(jīng)過幾年時間的運行實踐,充分驗證了它的穩(wěn)定性和健壯性。如思科、沃爾瑪、阿迪達斯等公司,都在使用Neo4j的過程中挖掘到了圖數(shù)據(jù)庫的巨大威力,并且創(chuàng)造出了蓬勃發(fā)展的商業(yè)模型。

  綜上所述,使用如此優(yōu)秀的數(shù)據(jù)庫,不僅可以提升一個應用的性能,而且可以適應大規(guī)模的數(shù)據(jù)增長,同時還能減輕開發(fā)人員和數(shù)據(jù)庫管理人員的工作負擔,給你和你的企業(yè)以及你的用戶帶來前所未有的優(yōu)越體驗。

  讀者對象

  本書適合所有開發(fā)人員,特別是SpringBoot開發(fā)者閱讀,同時適合數(shù)據(jù)庫管理人員和系統(tǒng)設計人員學習使用,并可作為系統(tǒng)策劃者進行數(shù)據(jù)庫選型的參考資料。

  實例代碼下載

  本書各章的實例代碼下載在各個章節(jié)中都有明確說明,同時也可以通過以下網(wǎng)址選擇不同項目進行下載或檢出:

  https://github.com/mr-csj?tab=repositories


點此購買


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號