本書以實例為依托,詳細地對實例做建模分析,并給出經過測試的源代碼,讀者可以按照書的介紹一步一步地實現每一個實例,這是一種學習建模和編程的極為便捷的方法。本書也是一本對使用Neo4j對圖形數據進行設計、建模和查詢的綜合指導書。書中探索了處理和查詢圖形數據的各種工具及其強大功能,包括圖形遍歷的概念及其使用方法,也討論了Neo4j的圖形查詢語言Cypher和如何使用SpringDataNeo4j將Neo4j集成到應用程序中,以及如何使用服務器模式和嵌入式模式等內容。
作?者?簡?介?About the AuthorAleksa Vukotic之前在Open Credo擔任數據管理實踐領導者,現任Noble Group的開發平臺部主管。他是一個軟件架構師和開發者、敏捷編程的倡導者、作者和培訓師,并且是許多Neo4j項目的開發者,如用圖形數據模型解決復雜的訪問控制列表和推薦引擎問題。 Nicki Watt是Open Credo的首席顧問。她務實、心靈手巧,是一個問題解決專家,樂于使用“正確的工具完成工作”。Nicki一直使用Neo4j等開源工具以及框架參與各種項目,包括對基于引擎問題的探究和推薦。她也是Spring Data Neo4j項目的貢獻者之一。 Tareq Abedrabbo是Open Credo的首席技術官(CTO)。他對編程語言有著強烈的興趣,從Scala和Python到Google Go。他在幾個NoSQL技術領域(包括Neo4j、MongoDB和Redis)有著非常豐富的知識,并在很早以前就開始積極從事Spring項目,是Spring Web Service項目的核心成員。 Dominic Fox是Open Credo的顧問,尤其喜歡把對編程語言理論的見解進行實踐并講解給他人。他作為專業開發者涉足了多種領域的工作,包括文檔管理、電信和金融,也包括Neo4j的培訓。他一直期望創建優秀的工具和庫,能使每天的編程工作更加直觀、可靠。 Jonas Partner是Open Credo的首席執行官(CEO),該公司是Neo Technology的服務合作伙伴,是解決復雜數據問題的專業公司。他還是《Spring Integration in Action》的合作作者。
Contents?目 錄譯者序序 言前 言作者簡介第一部分 Neo4j概述第1章Neo4j數據庫的一個應用案例 31.1為什么要有Neo4j 41.2關系數據庫中的圖形數據 41.3Neo4j中的圖形數據 81.4大數據下的SQL聯接操作與Neo4j圖形遍歷的對比 101.5圖形 131.6Neo4j在NoSQL領域的地位 131.6.1主鍵值存儲 141.6.2列族存儲 141.6.3面向文檔的數據庫 151.6.4圖形數據庫 151.6.5與NoSQL類數據庫的比較 151.7Neo4j具有與ACID兼容的數據格式 161.8本章小結 17第2章Neo4j的數據模型 182.1Neo4j中數據模型的類型 182.1.1圖表建模的一個簡單實例 192.1.2圖表建模的一個復雜實例 202.2領域建模 222.3更多實例 262.3.1地鐵車站實例 262.3.2樂隊成員實例 272.4本章小結 29第3章Neo4j開發入門 303.1圖形數據結構建模 303.2使用Neo4j API 343.2.1創建節點 343.2.2創建關系 363.2.3為節點添加屬性 383.2.4節點類型策略 403.2.5為關系添加屬性 413.3節點標簽 433.4本章小結 46第4章強大的圖形遍歷功能 474.1使用Neo4j核心Java API進行遍歷 474.1.1尋找起始節點 484.1.2遍歷直接關系 494.1.3遍歷深度為2的關系 514.1.4內存使用注意事項 534.2使用Neo4j的遍歷API進行遍歷 554.2.1使用Neo4j的內置遍歷結構 554.2.2實現一個自定義評估函數 564.3本章小結 59第5章數據索引 605.1創建索引項 605.2通過郵箱地址查找用戶 625.3對多個匹配結果的處理 645.4對索引過的數據進行修改的處理 655.5自動索引 665.5.1模式索引 665.5.2自動索引 695.6索引的成本/效益權衡 705.6.1索引查詢的性能優勢 715.6.2當更新和插入數據時索引對性能的影響 725.6.3索引的存儲 735.7本章小結 73第二部分 Neo4j應用開發第6章Neo4j的查詢語言Cypher 776.1Cypher簡介 776.1.1Cypher入門 786.1.2執行Cypher查詢 796.2Cypher的基本句法 856.2.1模式匹配 856.2.2查找起始節點 896.2.3過濾數據 926.2.4獲得結果 936.3用Cypher更新圖形數據 966.3.1創建新圖形實體 976.3.2刪除數據 996.3.3更新節點和關系屬性 996.4高級Cypher 1006.4.1聚合 1006.4.2函數 1016.4.3with語句的管道功能 1036.4.4Cypher的兼容性 1046.5本章小結 104第7章事務 1057.1事務的基礎知識 1057.1.1添加事務 1077.1.2打好基礎,循序漸進 1087.2事務的高級功能 1097.2.1事務的語義 1097.2.2事務中的讀取與顯式讀鎖 1117.2.3事務中的寫入與顯式寫鎖 1127.2.4無效鎖的危害 1147.3與其他事務管理系統的集成 1147.4事務事件 1167.5本章小結 117第8章深度遍歷 1188.1遍歷的順序 1188.1.1深度優先 1198.1.2廣度優先 1218.1.3深度優先與廣度優先順序的比較 1228.2擴展關系 1248.2.1標準擴展器 1248.2.2用于擴展的順序關系 1268.2.3自定義擴展器 1278.3管理唯一性 1308.3.1NODE_GLOBAL唯一性 1308.3.2NODE_PATH唯一性 1328.3.3其他唯一性類型 1338.4雙向遍歷 1348.5本章小結 137第9章Spring Data Neo4j 1389.1SDN適合做什么 1389.1.1什么是Spring以及Spring與SDN是怎樣關聯的 1409.1.2SDN適合做什么(及不適合做什么) 1409.1.3從哪里獲得SDN 1419.1.4從哪里獲得更多的信息 1419.2用SDN建模 1419.2.1原始POJO域建模 1429.2.2注釋域模型 1449.2.3建模節點實體 1459.2.4建模關系實體 1489.2.5建模節點實體之間的關系 1509.3訪問和持久化實體 1529.3.1支持Spring的配置 1529.3.2Neo4jTemplate類 1539.3.3資源庫 1549.3.4其他選項 1579.4對象圖形映射選項 1589.4.1簡單映射 1589.4.2基于AspectJ的高級映射 1619.4.3對象映射總結 1649.5執行查詢和遍歷 1649.5.1注釋查詢 1649.5.2動態派生查詢 1669.5.3遍歷 1689.6本章小結 168第三部分 Neo4j應用實例第10章Neo4j的嵌入式模式與服務器模式 17110.1使用模式概述 17110.2嵌入式模式 17310.2.1核心Java集成 17310.2.2其他基于JVM的集成 17610.3服務器模式 17710.3.1Neo4j服務器概述 17810.3.2使用細粒度Neo4j服務器模式的REST API 17910.3.3使用Cypher Neo4j服務器模式REST API端點 18110.3.4使用遠程客戶端庫幫助訪問Neo4j服務器 18210.3.5服務器插件和非托管擴展 18410.4權衡選項 18410.4.1對架構的考慮 18510.4.2對性能的考慮 18710.4.3其他需要考慮的事項 19010.5充分利用服務器模式 19010.5.1避免細粒度操作 19110.5.2使用Cypher 19210.5.3服務器插件 19410.5.4非托管擴展 19610.5.5流REST API 19810.6本章小結 199第11章Neo4j的架構與應用 20011.1高層Neo4j架構 20011.1.1設置場景 20211.1.2硬盤 20211.1.3存儲文件 20311.1.4Neo4j緩存 20511.1.5事務日志及可恢復性 21011.1.6編程API 21111.2Neo4j的高可用性 21211.2.1Neo4j集群概述 21311.2.2設置Neo4j集群 21611.2.3復制——讀和寫的策略 21811.2.4緩存分區 22211.2.5HA小結 22411.3備份 22511.3.1離線備份 22511.3.2在線備份 22711.3.3從備份中還原數據 22911.4本書可能沒有涵蓋但你可能會關注的問題 22911.4.1安全 22911.4.2監控 22911.5本章小結 23011.6最后的設想 230附錄A安裝Neo4j服務器 231附錄B設置和運行示例程序 236附錄C設置使用SDN的項目環境 241附錄D獲得更多的幫助 247