天天看點

圖形資料庫Neo4j

前言

圖表資料庫是當今巨大的宏觀業務趨勢之一:在高度連接配接的資料中利用複雜和動态的關系,産生洞察力和競争優勢。無論我們想要了解客戶之間的關系,電話或資料中心網絡中的元素,娛樂生産商和消費者,還是基因和蛋白質,都能夠了解和分析高度相關資料的龐大圖表,這将是确定哪些公司優于其競争對手的關鍵在未來十年。對于任何顯着大小或值的資料,圖形資料庫是表示和查詢連接配接資料的最佳方式。連接配接的資料是其解釋和價值要求我們首先了解其組成要素相關方式的資料。通常,為了産生這種了解,我們需要命名和限定事物之間的聯系。雖然大公司在很久以前才意識到這一點,并開始建立自己的專有圖形處理技術,但我們現在處于這個技術迅速民主化的時代。今天,通用圖表資料庫是現實,使主流使用者能夠體驗連接配接資料的優勢,而無需投資建立自己的圖形基礎架構。圖形資料的複興和圖形思考令人驚奇的是,圖形理論本身并不新鮮。圖形理論是歐拉在18世紀開創的,自此以後,數學家,社會學家,人類學家和其他從業者一直在積極研究和完善。然而,隻有在過去幾年中,圖形理論和圖形思維才被應用于資訊管理。在那時,圖形資料庫已經幫助解決了社交網絡,主資料管理,地理空間,建議等方面的重要問題。圖形資料庫的更多關注是由兩個力量驅動的:通過Facebook,Google和Twitter等公司的巨大商業成功,他們都将自己的商業模式圍繞在自己的專有圖形技術上; 并将通用圖表資料庫引入技術領域。

第一章 簡介

雖然這本書大部分都是關于圖形資料模型的,但它并不是關于圖形理論的書。我們不需要太多的理論來利用圖形資料庫:隻要我們了解圖形,我們幾乎在那裡。 考慮到這一點,讓我們回憶一下關于圖形的一般記憶。

什麼是圖表? 

正式地,一個圖形隻是一個頂點和邊的集合,或者在一個不太吓人的語言中,一組節點和連接配接它們的關系。 圖形表示實體作為節點,以及這些實體與世界作為關系的方式。 這種通用的,具有表現力的結構使我們能夠從建造太空火箭到道路系統,從供應鍊或食品來源到人口的醫療史等各種場景進行模組化。

例如,Twitter的資料很容易被表示為圖表。 在圖1-1中,我們看到一個小型的Twitter使用者網絡。 每個節點都标記為User,表示其在網絡中的作用。 這些節點然後與關系相關聯,這有助于進一步建立語義環境:即比利跟随哈利,而哈利依次跟随比利。 露絲和哈利也互相對峙,可悲的是,雖然露絲跟着比利,但比利還沒有回報。

圖形資料庫Neo4j

圖1-1。 一個小的社交圖

當然,Twitter的真實圖形比圖1-1中的例子大了數億倍,但它的工作原理完全相同。 在圖1-2中,我們擴充了圖形以包含由Ruth釋出的消息。

圖形資料庫Neo4j

圖1-2。 釋出消息

雖然簡單,圖1-2顯示了圖形模型的表現力。 很容易看到露絲發表了一串消息。 她最近的消息可以通過跟随一個标記為CURRENT的關系找到。 先前的關系建立了露絲的時間表。

圖表空間的進階視圖

管理,處理和分析圖形的衆多項目和産品近年來爆炸式發展。絕大多數技術使得難以跟蹤這些工具以及它們的差別,即使對于在空間活躍的我們也是如此。本節提供了一個進階架構,用于了解新興圖形的景觀。從10,000英尺,我們可以将圖形空間分為兩部分:主要用于事務線上圖形持久性的技術,通常從應用程式實時直接通路這些技術稱為圖形資料庫,是本書的主要重點。它們相當于關系世界中的“正常”線上事務處理(OLTP)資料庫。主要用于離線圖分析的技術通常作為一系列批處理步驟執行。這些技術可以稱為圖形計算引擎。它們可以被認為與其他用于分析資料的技術(例如資料挖掘和線上分析處理(OLAP))處于同一類别。

圖形資料庫

圖形資料庫管理系統(以下為圖形資料庫)是一種具有建立,讀取,更新和删除(CRUD)方法的線上資料庫管理系統,用于公開圖形資料模型。圖形資料庫通常建構為與事務(OLTP)系統一起使用。是以,它們通常針對事務性能進行優化,并考慮到事務完整性和操作可用性。

 在調查圖形資料庫技術時,我們應該考慮圖形資料庫的兩個屬性:

底層存儲

一些圖形資料庫使用優化和設計用于存儲和管理圖形的本機圖形存儲。然而,并非所有圖形資料庫技術都使用本機圖形存儲。一些将圖形資料序列化為關系資料庫,面向對象資料庫或其他通用資料存儲。

處理引擎

一些定義要求圖形資料庫使用無索引的鄰接,這意味着連接配接的節點在資料庫中實體上“指向”彼此之間.2這裡我們看到一個更寬泛的視圖:從使用者的角度看,任何資料庫都像圖形資料庫即通過CRUD操作公開圖形資料模型)符合圖形資料庫的要求。然而,我們确實承認無索引鄰接的顯着性能優勢,是以使用術語本地圖處理來描述利用無索引鄰接的圖形資料庫。

關系是圖形資料模型的一流公民。 在其他資料庫管理系統中并不是這樣,我們必須推斷實體之間的連接配接,例如外鍵或帶外處理(如map-reduce)。 通過将節點和關系的簡單抽象組合到連接配接結構中,圖形資料庫使我們能夠建構任意複雜的模型,将其映射到我們的問題領域。 所産生的模型比使用傳統關系資料庫和其他NOSQL(不僅僅是SQL)存儲産生的模型更簡單,同時更具表現力。

圖1-3顯示了目前市場上一些圖形資料庫的圖形概述,基于其存儲和處理模型。

圖形資料庫Neo4j

圖1-3。 圖形資料庫空間的概述

圖形計算引擎

圖形計算引擎是一種能夠對大型資料集運作全局圖形計算算法的技術。圖形計算引擎設計用于執行資料中識别叢集等問題,或回答諸如“社交網絡中的每個人平均有多少關系?”等問題。

由于它們強調全局查詢,是以圖形計算引擎通常被優化用于批量掃描和處理大量資訊,并且在這方面它們類似于在關系中使用的其他批次分析技術,如資料挖掘和OLAP世界。而一些圖形計算引擎包括圖形存儲層,其他(可以說是大多數)圖形計算引擎嚴格關注從外部源提供的處理資料,然後将其結果存儲在别處。

圖1-4顯示了用于部署圖形計算引擎的常見架構。該體系結構包括具有OLTP屬性(例如MySQL,Oracle或Neo4j)的記錄系統(SOR)資料庫,其服務請求并在運作時響應來自應用程式(以及最終使用者)的查詢。定期地,提取,轉換和加載(ETL)作業将資料從記錄資料庫系統移動到圖形計算引擎中進行離線查詢和分析。

圖形資料庫Neo4j

圖1-4。 典型圖形計算引擎部署的進階視圖

存在各種不同類型的圖形計算引擎。 最值得注意的是存儲器/單機圖計算引擎如Cassovary和分布式圖計算引擎如Pegasus或Giraph。 大多數分布式圖形計算引擎都是基于Google撰寫的Pregel白皮書,它描述了Google用來對頁面進行排序的圖形計算引擎。

圖形資料庫的力量

盡管事實上,任何東西都可以被繪制成圖表,但我們生活在一個務實的預算,項目時間線,企業标準和商品化技能的世界。 圖形資料庫提供了一種功能強大而又新穎的資料模組化技術本身并沒有為替代已經完善的,易于了解的資料平台提供充分的理由; 還必須立即和非常重要的實際利益。 在圖形資料庫的情況下,這種動機以一組使用案例和資料模式的形式存在,其在圖中實作時性能提高了一個或多個數量級,并且與集合的批處理相比,其潛伏期要低得多。 除了這種性能優勢之外,圖形資料庫還提供了非常靈活的資料模型,并提供了與當今靈活軟體傳遞實踐相一緻的傳遞方式。

性能

是以,選擇圖形資料庫的一個令人信服的原因是處理連接配接的資料與關系資料庫和NOSQL存儲時的性能提升。 與關系資料庫相反,随着資料集越來越多,連接配接密集型查詢性能惡化,圖形資料庫性能趨于保持相對恒定,即使資料集增長。 這是因為查詢被本地化到圖形的一部分。 是以,每個查詢的執行時間僅與周遊的圖形部分的大小成比例,以滿足該查詢,而不是總體圖形的大小。

靈活性

作為開發人員和資料架構師,我們希望按照領域的要求連接配接資料,進而允許結構和架構随着我們對問題空間的日益增長的了解而出現,而不是在我們最初知道真實的形狀和複雜性的資料。圖形資料庫直接解決這個需求。如第3章所示,圖形資料模型表達和适應業務需求,使IT能夠以業務速度移動。

圖形自然是加法的,這意味着我們可以在現有的結構中添加新的關系,新節點,新标簽和新的子圖,而不會影響現有的查詢和應用程式功能。這些事情對開發人員的生産力和項目風險都有正面的影響。由于圖形模型的靈活性,我們無需提前對詳細的細節進行模組化,而是面對不斷變化的業務需求,這一切都是愚蠢的。圖形的附加屬性也意味着我們傾向于執行更少的遷移,進而減少維護開銷和風險。

靈活

我們希望能夠與我們的其餘應用程式一起演進我們的資料模型,使用與當今增量和疊代軟體傳遞實踐相一緻的技術。現代圖形資料庫使我們能夠進行無摩擦開發和優雅的系統維護。特别地,圖形資料模型的無模式特性以及圖形資料庫的應用程式程式設計接口(API)和查詢語言的可測試性質,使我們能夠以受控的方式演進應用程式。

同時,正是因為它們是免費的,圖形資料庫缺乏我們在關系世界中熟悉的面向模式的資料治理機制。但這不是風險;相反,它提出了一種更加明顯和可操作的治理方式。正如我們在第4章中所示,治理通常以程式設計方式應用,使用測試來驅除資料模型和查詢,以及斷言依賴于圖的業務規則。這不再是一個有争議的做法:比關系開發更重要,圖形資料庫開發與當今靈活和測試驅動的軟體開發實踐保持一緻,允許圖形資料庫支援的應用程式随着不斷變化的業務環境而發展。

總結

在本章中,我們已經檢視了圖形屬性模型,這是一個用于表示連接配接資料的簡單而富有表現力的工具。 屬性圖以表現力和靈活的方式捕獲複雜的域,而圖形資料庫可以輕松開發操縱圖形模型的應用程式。

在下一章中,我們将詳細介紹幾種不同的技術如何解決連接配接資料的挑戰,從關系資料庫開始,轉移到聚合NOSQL存儲上,并以圖形資料庫結束。 在讨論過程中,我們将了解為什麼圖形和圖表資料庫為模組化,存儲和查詢連接配接的資料提供了最佳方法。 接下來的章節将介紹如何設計和實作基于圖形資料庫的解決方案。