Part 01 什么是圖形數據庫
?圖形數據庫是NoSQL數據庫的一種類型,起源于歐拉理論和圖理論,對應英文名是Graph Database。一種專用于創建和處理圖形的專業化單一用途平臺,圖形包括節點、邊和屬性,它們能夠以關系數據庫無法實現的方式來表示和存儲數據。
圖形數據庫有兩種常見的數據庫模型:屬性圖(Property Graphs)和資源描述框架圖(RDF Graphs)。屬性圖側重于分析和查詢,而RDF圖則側重于數據集成。
1.1 屬性圖
屬性圖用于對數據之間的關系進行建模,能夠基于這些關系進行查詢和數據分析。屬性圖具有頂點(包含有關主題的詳細信息)和邊(表示頂點之間的關系)。頂點和邊可以具有相關聯的屬性。屬性圖用途廣泛,因此被廣泛用于金融、制造、公共安全、零售等眾多行業和領域。
- 節點(Nodes):是圖中的實體,用表示其類型的0到多個文本標簽進行標記,相當于實體。
- 邊(Edges):是節點之間的定向鏈接,也稱為關系。其中對應的“from node”稱為源節點,“to node”稱為目標節點。邊是定向的且每條邊都有一個類型,它們可以在任何方向上導航和查詢。相當于實體之間的關系。
- 屬性(Properties):是一個鍵值對,頂點和邊都具有屬性。
下圖是一個屬性圖片段的可視化示例,說明了演員、導演、電影和電視劇的相互關系:
其中淺藍色橢圓表示節點,深藍色框表示節點的標簽,黃色框表示屬性,紅色方框表示邊的類型。
1.2 RDF圖
RDF,即資源描述框架(Resource Description Framework),形式上主要由主謂賓(SPO, 即subject, predicate, object)三元組組成。RDF圖存在統一的標準,其技術棧的標準是由萬維網聯盟(W3C)負責管理。
RDF圖主要由以下兩種元素組成:
- 節點(Nodes):可以是具備唯一性的資源或字面值(如數值、字符串)。
- 邊(Edges):節點之間的有向連接,也被稱為謂語(predicate),一般由主語指向賓語。
RDF也有標準的查詢語言SPARQL,SPARQL既是一種功能齊全的查詢語言,也是一種HTTP協議,可以接收通過HTTP發送的查詢請求。
RDF圖的標準化有一個關鍵點就是序列化。通過序列化可以在不同RDF圖數據庫之間無縫切換,常用的序列化格式包括Turtle(最常用)、JSON-LD、XML。
下圖是一個RDF圖片段的可視化示例,內容和屬性圖片段示例基本一致:
相比于屬性圖數據庫,RDF數據庫的可視化結果會更干凈(構成數據的元素類型少),但也更寬廣(節點和邊的數量更多)。
Part 02 圖形數據庫的優勢
?圖形格式可提供一個更靈活的平臺,幫助用戶基于關系強度或關系質量等因素查找遠關系或分析數據。您可以使用圖形來探索和發現社交網絡、物聯網、大數據、數據倉庫以及多種業務使用場景(包括銀行中的欺詐檢測、社交網絡中的關系發現以及360度客戶視圖)下復雜事務數據中的關系和模式。如今,圖形數據庫正越來越廣泛地應用于數據科學,幫助用戶更加清晰地呈現數據關系。
由于圖形數據庫以顯式方式存儲關系,因此利用頂點間連接的查詢和算法可以達到亞秒(而不是小時或天)級別。用戶無需執行無數次聯接,可以更輕松地將數據用于分析和機器學習,高效探索周圍世界。
圖形數據庫高度靈活,功能超強,可助您通過圖形格式,更輕松地識別復雜關系,捕獲更深入的洞察。它通常使用PGQL一類的語言來運行查詢。請查看以下示例,了解使用PGQL和SQL進行查詢有何不同。
從示例中可以看出,PGQL代碼更簡單,更高效。由于圖形強調的是數據之間的關系,因此非常適合多種不同類型的分析。圖形數據庫尤其擅長:
- 查找兩個節點之間的最短路徑;
- 確定產生重大活動/影響力的節點;
- 分析連接性,識別網絡的最薄弱點;
- 基于組中的連接距離/密度來分析網絡或社區狀態。
Part 03 主流圖形數據庫
圖形數據庫TOP10排名:
- Neo4j
- Microsoft Azure Cosmos DB
- Virtuoso
- ArangoDB
- OrientDB
- JanusGraph
- Amazon Neptune
- GraphDB
- TigerGraph
- Fauna
- Dgraph
2013年到2023年圖形數據庫流行趨勢統計圖:
Neo4j因其嵌入式、高性能、輕量級等優勢,越來越受到關注。
Neo4j是由JAVA實現的開源NoSQL圖數據庫。Neo4j實現了專業數據庫級別的圖數據模型的存儲。與普通的圖處理或內存數據庫不同,Neo4j提供了完整的數據庫特性,包括ACID 事務的支持、集群支持、備份與故障轉移等,這使其適合于企業級生產環境下各種應用。
Neo4j還提供了一些特殊的功能:
? 一個本地化的圖數據庫:Neo4j自底向上構建成一個圖數據庫。它的體系結構旨在優化快速管理、存儲和遍歷節點和關系。在Neo4j中,關系是數據庫中最重要的元素,它代表節點之間的相互聯系。眾所周知,在關系數據庫領域中,“關系”適用于多個不同表之間的連接操作,這種操作的性能下降與關系的數量呈指數級別的,但在Neo4j中則是用于從一個幾點指向另一個節點,其性能卻是線性級別的。
? 界面友好:提供了查詢與展示的Web操作界面。對于圖數據模型使用D3.js做數據可視化,形象地展示了數據模型的節點和關系。
? 聲明式圖查詢語言:Cypher是一種聲明式圖數據庫查詢語言,它表現力豐富,查詢效率高,其地位和作用域關系型數據庫中的SQL類似,Cypher還有良好的擴展性,用戶可以定制自己的查詢方式(如自定義過程)。
? ACID事務:Neo4j通過ACID事務提供真正的數據安全,Neo4j使用事務來保證輸在硬件故障或系統奔潰的情況下不會丟失。
? 高性能:Neo4j使用多副本主從復制的方式構建高可靠集群,支持大數據集合并且可以不斷擴展其容量,可存儲數百萬億個實體,提供了可容錯、可擴展的集群,此外Neo4j還提供熱備份和性能監控功能。
Azure Cosmos DB是微軟提供的一種用于新式應用開發的完全托管的NoSQL數據庫和關系數據庫。Azure Cosmos DB提供個位數的毫秒響應時間以及自動和即時可伸縮性,不管什么規模都可以保證速度。SLA支持的可用性和企業級安全性可確保業務連續性。
- 在全球任何位置提供統包式多區域數據分布;
- 開源API;
- 適用于常用語言的SDK。
Virtuoso可以對RDF數據進行有效的存儲和管理。基于Virtuoso進行RDF數據存儲的應用也越來越多,BioGateway、Bio2RDF、DBpedia-live和Neurocommons。
Virtuoso提供的開源版本能支持數十億規模的三元組存儲和管理。
Virtuoso是OpenLink公司開發的一款跨平臺的對象關系數據庫、虛擬/通用數據庫,擁有強大的過程語言,支持Java和.NET語言的內嵌,可以通過Web、Web Services、ODBC和JDBC等進行數據的訪問。
Virtuoso在現有(對象)關系數據庫上增加了對RDF數據的支持,一方面可以充分利用傳統數據庫的事務處理、查詢優化、訪問控制、日志和數據恢復等功能,技術成熟度高、系統穩定,另一方面可以實現語義數據和其他數據的無縫連接。