官术网_书友最值得收藏!

  • 圖數據庫實戰
  • (美)戴夫·貝克伯杰 喬希·佩里曼
  • 3148字
  • 2021-10-26 11:14:15

關于本書

本書是為所有使用圖數據庫來構建應用程序的人編寫的,旨在讓你對圖和圖數據庫擁有基本的理解,以及為使用常見圖數據庫模式來構建應用程序提供框架。為了講授這個框架,本書遵照軟件開發生命周期來開發一個虛構的應用程序,名為“友聚”(DiningByFriends)。在整本書中,我們將通過這個應用程序來具體地展現圖原理以及所講授概念和內容的例子。本書將在多處比較構建圖應用程序和使用傳統關系數據庫模型之間的差異。最終,你不僅將擁有構建圖應用程序所需的技能,還將構建自己的第一個應用程序“友聚”。

本書面向想使用圖數據庫作為其應用程序后端數據存儲的程序開發人員、數據工程師和數據庫開發人員。本書并不期望你具備任何使用圖數據庫的經驗,但是你應該熟悉數據建模概念,特別是關系數據庫的開發,因為這些概念將在整本書中被作為常見參考標準而大量使用。盡管所有應用程序代碼都是用Java編寫的,但任何具有面向對象應用程序開發經驗的開發人員應該都能夠理解這些概念和內容。

本書分為三個部分,共11章。第一部分“圖數據庫入門”將為“友聚”應用程序建立基礎。

● 第1章首先介紹圖及相關術語;然后討論圖數據庫與關系數據庫的區別,以及如何使用圖數據庫來解決高度關聯數據問題;最后將討論什么樣的問題適合使用圖數據庫來解決。

● 第2章通過為“友聚”應用程序建立初始數據模型來著手實踐。最終,你會熟悉一套框架,它能把業務需求和概念數據模型轉換成使用圖數據庫元素頂點、邊和屬性的初始數據模型。

● 第3章開始介紹圖遍歷,主要學習圖數據庫的查詢過程(遍歷)。你將了解如何用圖數據庫檢索和篩選數據;然后學習如何導航圖數據庫結構,以及使用圖數據庫與關系數據庫的區別;最后會看到如何輕松地遞歸遍歷一個圖,以檢索復雜、互聯的數據。

● 第4章繼續圖遍歷的旅程,涵蓋數據變化用例;然后展示如何遍歷圖來找到連接兩者的實體和關系,即路徑;最后研究如何借助關系上的屬性來篩選遍歷和提升性能。

● 第5章結束對圖遍歷的初步關注,討論如何將遍歷結果格式化為所需的輸出。另外,你將學習如何執行常見操作,例如排序、篩選和限制返回的結果。

● 第6章開始構建“友聚”應用程序,把第3~5章開發的遍歷合并到“友聚”Java應用程序中。然后,這一章會通過處理結果來結束第一部分。

第二部分“使用圖數據庫構建應用程序”擴展了第一部分介紹的概念。

● 第7章使用第2章中的數據建模技術以及你所學的關于遍歷圖的知識來擴展數據模型,用于更復雜的用例,例如推薦引擎和個性化。

● 第8章借助推薦引擎的用例,演示使用強大的熟路模式來創建穩健的推薦應用程序模式。

● 第9章使用我們的個性化用例來演示如何在圖應用程序中使用子圖訪問模式。

第三部分“進階”將跨越“友聚”應用程序,討論開發過程的后續步驟。

● 第10章討論如何調試和排除常見的遍歷性能問題,然后研究超級節點到底是什么以及它為什么會在圖應用程序中產生問題。你還會了解這些常見的應用程序及遍歷陷阱和反模式帶來的性能問題,以及如何識別和避免這些問題。

● 第11章從前瞻性的角度出發,討論你可能希望用在圖應用程序中的更多知識;還會討論一些最常見的圖分析算法,以及如何應用這些算法來解決特定的問題;最后將概述如何在機器學習中應用圖。

本書包含大量代碼示例,既有帶編號的代碼清單,又有在正文中出現的代碼。在這兩種情況下,代碼都采用等寬字體,以便與普通文本區分開來。

在很多情況下,本書會對原始代碼重新進行格式化,比如添加換行符和重排縮進,以適應頁面大小。在極少數情況下,還會在代碼清單中使用行延續標記(?)。除此之外,代碼清單中還會有許多代碼注釋,以突出強調重要的概念。

本書中的示例代碼可以從圖靈社區本書主頁下載。

本書的目標是幫助你掌握構建圖應用程序所需的概念知識。為了提供這些概念的實際示例,我們必須選擇用于演示的具體技術和產品。

第一個選擇是數據庫的具體類型。我們決定使用帶標注的屬性圖數據庫(labeled property graph database),而不是RDF存儲或Triple Store數據庫。這是因為帶標注的屬性圖數據庫是具體產品中最常見的類型,而且似乎是發展勢頭較好的圖數據庫。另外,帶標注的屬性圖數據庫的相關概念最接近我們熟悉的關系數據庫,因此用于做對比會有很好的效果。

這也引出了我們面臨的下一個選擇:要使用的遍歷語言是openCypher還是Gremlin?

雖然使用openCypher的理由很充分,但本書的目標是盡可能保持與具體產品無關。這樣一來,當你開始構建應用程序時,就可以很容易地將所學概念和技術應用于許多流行的數據庫。這一點很重要。最后,我們決定使用Apache TinkerPop 3.4.x框架,因為它兼容絕大多數圖數據庫產品。

在本書的立項和評審過程中,我們多次被問到為什么選擇TinkerPop/Gremlin技術棧,而不是Neo4j/Cypher技術棧。鑒于Neo4j生態系統的普及程度,提出這個問題很合理,值得全面解釋。我們選擇TinkerPop的Gremlin作為本書演示所用的技術,有三個理由:

● Gremlin更適合用來教授遍歷工作原理;

● Gremlin是企業級應用程序的常用語言;

● Gremlin在不同屬性圖數據庫產品之間的可移植性最高。

關于第一個理由,我們認為與Cypher/openCypher的聲明式方法相比,Gremlin的命令式設計為學習圖查詢工作原理提供了更好的教學工具。Gremlin的語法需要我們去思考如何在圖中移動查詢光標,以確定查詢光標下一步要移動到哪里。雖然我們確實欣賞Cypher/openCypher的簡單性,但它也可能會在解決關鍵技術問題時令人混淆,特別是在處理性能或規模問題時。因此,雖然Cypher/openCypher是學習如何處理關聯數據的一個良好起點,但我們認為Gremlin更適合構建高性能、可伸縮的數據應用程序。

出于第二個理由,許多應用程序使用的圖數據庫支持TinkerPop。這意味著Gremlin是首選的查詢語言。雖然一些企業同時擁有使用Cypher/openCypher和Gremlin的應用程序,但根據我們的經驗,更大、更復雜的企業級項目似乎都選擇了支持TinkerPop的圖數據庫或云服務。

至于第三個理由,就目前來講,Gremlin是跨圖數據庫引擎最廣泛可用的查詢語言。幾乎所有主要云供應商(AWS、Microsoft Azure、IBM、華為云等)都提供兼容Gremlin的圖數據庫或服務。唯一的例外是Google云平臺,它提供的是Neo4j服務。

我們的目標并不是倡導使用具體的某一種圖數據庫或語言。我們只是希望提供一個堅實的基礎,讓你知道如何在構建具有高度關聯數據的應用程序時使用圖數據庫,并展示圖數據庫是如何工作的。我們認為,Gremlin是實現這一目標的最佳途徑。

在決定使用TinkerPop的Gremlin之后,我們不得不選擇一個支持TinkerPop的特定數據庫。本著與具體產品無關的精神,我們決定在示例中使用TinkerGraph。TinkerGraph是Gremlin Server和Gremlin Console使用的圖實現,而Gremlin Server和Gremlin Console都在Apache軟件基金會TinkerPop項目的參考軟件之列。

最后,必須選擇一種編程語言來構建示例應用程序“友聚”。由于Java是圖數據庫最常用的語言,因此我們選擇它作為應用程序的開發語言。應該注意的是,用其他語言(如C#、JavaScript和Python)也可以構建相同的應用程序。這不僅是可能的,我們自己也做到了。但是本書中提供的所有遍歷都是使用Gremlin編寫的,所有應用程序代碼都是使用Java編寫的。

雖然本書介紹的幾乎所有概念都不是支持TinkerPop的數據庫所特有的,但還是有極少數例外。在這種情況下,我們會標注在何處使用了TinkerPop特有的功能,以便你知道某個特定功能可能在你所選擇的圖數據庫中不可用。如果沒有給出這樣的標注,就可以默認所討論的概念也適用于其他帶標注的屬性圖數據庫。

購買本書的讀者可以免費訪問由Manning管理的私有在線論壇。你可以在該論壇上發表與本書有關的評價,提出技術問題,接受來自作者及其他用戶的幫助。你可以通過https://livebook.manning.com/#!/book/graph-databases-in-action/discussion來訪問該論壇,還可以在https://livebook.manning.com/#!/discussion上了解更多有關Manning論壇及行為準則的信息。

關于該論壇,Manning的承諾是提供一個讀者之間以及讀者和作者之間可以進行有意義對話的場所。這并不意味著作者將會全身心投入該論壇,作者對于該論壇的貢獻仍然是自愿而且無償的。所以我們建議你問一些具有挑戰性的問題來激發作者的興趣!只要本書還在銷售,都可以登錄該論壇,查閱以前的帖子。

掃描下方二維碼,即可獲取電子書相關信息及讀者群通道入口。

主站蜘蛛池模板: 天等县| 海淀区| 宁远县| 花莲县| 科尔| 珲春市| 咸丰县| 宜君县| 慈利县| 芦山县| 阿拉尔市| 玉龙| 和静县| 衡阳县| 汶上县| 崇仁县| 上杭县| 阿荣旗| 四子王旗| 社会| 呼图壁县| 北宁市| 麻阳| 延川县| 桑植县| 永清县| 陆丰市| 涡阳县| 上栗县| 昌黎县| 永兴县| 青川县| 海兴县| 象州县| 南和县| 乐亭县| 灵石县| 定兴县| 方山县| 临海市| 东方市|