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