任何一種數(shù)據(jù)庫(kù)都是把現(xiàn)實(shí)世界中的我們認(rèn)為有價(jià)值的部分?jǐn)?shù)據(jù)進(jìn)行建模存儲(chǔ),其中的數(shù)據(jù)可以用來(lái)進(jìn)行業(yè)務(wù)支撐,同樣也可以利用這些數(shù)據(jù)進(jìn)行計(jì)算分析,挖掘其中價(jià)值。


數(shù)據(jù)庫(kù)歷史:從打孔紙片到大數(shù)據(jù)時(shí)代
數(shù)據(jù)記錄的需求遠(yuǎn)在文字誕生之前就已經(jīng)存在了,從結(jié)繩記事到穿孔卡,乃至到后來(lái)的數(shù)據(jù)庫(kù)的出現(xiàn)。當(dāng)今無(wú)論是運(yùn)行的網(wǎng)站、銀行系統(tǒng),以及各種應(yīng)用的背后,都離不開數(shù)據(jù)庫(kù)。因?yàn)镈atabase Management System(DBMS) 數(shù)據(jù)庫(kù)管理系統(tǒng)可以高效、可靠、方便、安全的針對(duì)多用戶存儲(chǔ)和訪問(wèn)海量持久數(shù)據(jù)。當(dāng)今我們提到數(shù)據(jù)庫(kù),相信大部分人腦中都是關(guān)系型數(shù)據(jù)庫(kù)的連接“表”的形式,看到數(shù)據(jù),也第一時(shí)間想到如何把數(shù)據(jù)以表的形式存下來(lái)。這大概就是芒格所說(shuō)的":當(dāng)你拿著錘子,看什么都是釘子”。
這時(shí)候讓我們,后退一步,以更宏觀的角度來(lái)看數(shù)據(jù)庫(kù),可以讓我們更好的理解數(shù)據(jù)本身。

我們可以把數(shù)據(jù)庫(kù)的產(chǎn)生和發(fā)展分為四個(gè)階段:
- 層級(jí)和導(dǎo)航數(shù)據(jù)庫(kù),這個(gè)階段的數(shù)據(jù)庫(kù)以層級(jí)的形式把數(shù)據(jù)進(jìn)行建模存儲(chǔ),把數(shù)據(jù)和數(shù)據(jù)之間的關(guān)系進(jìn)行存儲(chǔ),雖然產(chǎn)生了B-tree和Self-balancing tree 的數(shù)據(jù)結(jié)構(gòu)形式進(jìn)行創(chuàng)新和優(yōu)化,但是由于受限于硬件條件,查詢速度還是太慢了。不過(guò)層級(jí)型數(shù)據(jù)庫(kù)對(duì)后來(lái)數(shù)據(jù)的的發(fā)展產(chǎn)生了非常深遠(yuǎn)的影響。
- 關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)通過(guò)把數(shù)據(jù)以表的形式規(guī)范化,提供了一種極其高效的方式進(jìn)行數(shù)據(jù)存儲(chǔ),管理和查找。這樣的代價(jià)就是把數(shù)據(jù)之間的關(guān)系進(jìn)行了抽象化抽離,這些關(guān)系不再作為數(shù)據(jù)的形式進(jìn)行存儲(chǔ),只有在需要的時(shí)候才會(huì)進(jìn)行具象化,在面對(duì)以對(duì)象為查找目標(biāo)的深度查詢時(shí)會(huì)由于需要進(jìn)行多表關(guān)聯(lián)的原因?qū)е滦阅艿拖隆?/li> - NoSQL
這期間由于互聯(lián)網(wǎng)和應(yīng)用軟件的興起,軟件之間需要進(jìn)行數(shù)據(jù)互通,急需一種標(biāo)準(zhǔn),而這種標(biāo)準(zhǔn)并未采用“表”的形式交互數(shù)據(jù)。產(chǎn)生了多種多樣的靈活在指定領(lǐng)域?qū)S玫臄?shù)據(jù)庫(kù)。 - 圖數(shù)據(jù)庫(kù)
圖數(shù)據(jù)庫(kù)和其他數(shù)據(jù)庫(kù)的最大區(qū)別是圖數(shù)據(jù)將數(shù)據(jù)之間的關(guān)系作為數(shù)據(jù)的一部分進(jìn)行存儲(chǔ),這種存儲(chǔ)方式以數(shù)據(jù)最original的方式將數(shù)據(jù)進(jìn)行存儲(chǔ),這樣可以發(fā)揮數(shù)據(jù)的網(wǎng)絡(luò)效應(yīng)發(fā)揮數(shù)據(jù)的價(jià)值。 圖數(shù)據(jù)庫(kù)之所以能夠脫穎而出得益于在“大數(shù)據(jù)”時(shí)代,數(shù)據(jù)不是公司運(yùn)營(yíng)的附屬品,而是重要的戰(zhàn)略資產(chǎn)的認(rèn)知已經(jīng)成為共識(shí),同時(shí)
大多數(shù)有價(jià)值的商業(yè)問(wèn)題都是復(fù)雜的問(wèn)題,復(fù)雜的問(wèn)題包括,關(guān)系,影響,依賴,互動(dòng)等。這個(gè)發(fā)展的歷程我們可以認(rèn)為是思想認(rèn)知的轉(zhuǎn)變:從想辦法高效的管理數(shù)據(jù)到最大程度提取數(shù)據(jù)的價(jià)值。
什么是圖數(shù)據(jù)庫(kù)
圖數(shù)據(jù)庫(kù)是一種使用圖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)語(yǔ)義查詢的數(shù)據(jù)管理系統(tǒng),通過(guò)節(jié)點(diǎn)、邊和屬性來(lái)表示和存儲(chǔ)數(shù)據(jù)。
圖概念對(duì)于圖數(shù)據(jù)庫(kù)的理解至關(guān)重要。圖是一組點(diǎn)和邊的集合,“點(diǎn)”表示實(shí)體,“邊”表示實(shí)體間的關(guān)系。在圖數(shù)據(jù)庫(kù)中,數(shù)據(jù)間的關(guān)系和數(shù)據(jù)本身同樣重要,它們被作為數(shù)據(jù)的一部分存儲(chǔ)起來(lái)。這樣的架構(gòu)使圖數(shù)據(jù)庫(kù)能夠快速響應(yīng)復(fù)雜關(guān)聯(lián)查詢,因?yàn)閷?shí)體間的關(guān)系已經(jīng)提前存儲(chǔ)到了數(shù)據(jù)庫(kù)中。圖數(shù)據(jù)庫(kù)可以直觀地可視化關(guān)系,是存儲(chǔ)、查詢、分析高度互聯(lián)數(shù)據(jù)的最好辦法。
圖數(shù)據(jù)庫(kù)屬于非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)。圖數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的存儲(chǔ)、查詢以及數(shù)據(jù)結(jié)構(gòu)都和關(guān)系型數(shù)據(jù)庫(kù)有很大的不同。圖數(shù)據(jù)結(jié)構(gòu)直接存儲(chǔ)了節(jié)點(diǎn)之間的依賴關(guān)系,而關(guān)系型數(shù)據(jù)庫(kù)和其他類型的非關(guān)系型數(shù)據(jù)庫(kù)則以非直接的方式來(lái)表示數(shù)據(jù)之間的關(guān)系。圖數(shù)據(jù)庫(kù)把數(shù)據(jù)間的關(guān)聯(lián)作為數(shù)據(jù)的一部分進(jìn)行存儲(chǔ),關(guān)聯(lián)上可添加標(biāo)簽、方向以及屬性,而其他數(shù)據(jù)庫(kù)針對(duì)關(guān)系的查詢必須在運(yùn)行時(shí)進(jìn)行具體化操作,這也是圖數(shù)據(jù)庫(kù)在關(guān)系查詢上相比其他類型數(shù)據(jù)庫(kù)有巨大性能優(yōu)勢(shì)的原因。
圖數(shù)據(jù)庫(kù)(graph database)不同于圖引擎(graph engine)。圖數(shù)據(jù)庫(kù)主要應(yīng)用為聯(lián)機(jī)事務(wù)處理OLTP(on-line transaction processing),針對(duì)數(shù)據(jù)做事務(wù)(ACID)處理。 圖引擎用于聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing),進(jìn)行數(shù)據(jù)的批量分析。
圖數(shù)據(jù)庫(kù)發(fā)展歷程
Graph 1.0:?jiǎn)螜C(jī)原生圖數(shù)據(jù)庫(kù)
2002-2010年,以Neo4j為代表的支持事務(wù)性的圖數(shù)據(jù)庫(kù)發(fā)布,圖數(shù)據(jù)庫(kù)的使用開始興起。這個(gè)階段的圖數(shù)據(jù)庫(kù)采用小規(guī)模原生圖存儲(chǔ),與傳統(tǒng)數(shù)據(jù)庫(kù)相比,原生圖數(shù)據(jù)庫(kù)遍歷查詢時(shí)無(wú)需索引,能夠極大減少系統(tǒng)開銷、提升查詢效率。Graph 1.0尚處于前大數(shù)據(jù)時(shí)代,隨著數(shù)據(jù)量的增大,基于單機(jī)的小規(guī)模原生圖數(shù)據(jù)庫(kù)擴(kuò)展性較差,受制于單機(jī)性能的瓶頸,無(wú)法支持大規(guī)模數(shù)據(jù)的分布式存儲(chǔ)查詢以及并行計(jì)算。
Graph 2.0:分布式非原生圖數(shù)據(jù)庫(kù)
2010-2016年,隨著大數(shù)據(jù)時(shí)代的到來(lái)和物聯(lián)網(wǎng)行業(yè)的蓬勃發(fā)展,數(shù)據(jù)本身的豐富程度增加,數(shù)據(jù)之間的關(guān)聯(lián)性增多,擴(kuò)展性成為數(shù)據(jù)庫(kù)行業(yè)共同的痛點(diǎn)。以JanusGraph為代表的基于開源分布式存儲(chǔ)系統(tǒng)的圖數(shù)據(jù)庫(kù)廠商不斷涌現(xiàn)。由于底層基于分布式的非關(guān)系型存儲(chǔ),Graph 2.0時(shí)代的圖數(shù)據(jù)庫(kù)產(chǎn)品的擴(kuò)展性有長(zhǎng)足提升,可以支持非常大的圖,但也因?yàn)橥瑯拥脑?,查詢性較Graph 1.0低,并且無(wú)法有效支持多跳的深鏈查詢,無(wú)法滿足數(shù)據(jù)實(shí)時(shí)更新、查詢的需求。
Graph 3.0:原生分布式圖數(shù)據(jù)庫(kù)
2017年開始,為了滿足大數(shù)據(jù)量級(jí)下的查詢返回效率,在快速變化的商業(yè)環(huán)境下提供實(shí)時(shí)的商業(yè)智能,以Galaxybase圖數(shù)據(jù)庫(kù)采用原生分布式存儲(chǔ)方式,有效解決了大圖數(shù)據(jù)深鏈查詢效率和系統(tǒng)橫向擴(kuò)展性的雙重需求。同前幾代產(chǎn)品相比,第三代圖數(shù)據(jù)庫(kù)為圖數(shù)據(jù)實(shí)時(shí)更新、查詢而設(shè)計(jì),不但在存儲(chǔ)上提升了擴(kuò)展性,同時(shí)增加了并行計(jì)算的能力,能夠?qū)崿F(xiàn)實(shí)時(shí)的圖分析。大規(guī)模原生圖存儲(chǔ)、分布式并行計(jì)算能力正逐漸成為圖數(shù)據(jù)庫(kù)行業(yè)的主流。
從2020年開始,圖數(shù)據(jù)庫(kù)開始出現(xiàn)和知識(shí)圖譜平臺(tái)、人工智能平臺(tái)融合的趨勢(shì),出現(xiàn)了與人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)融合的圖平臺(tái)。這是下一代圖數(shù)據(jù)庫(kù)的發(fā)展趨勢(shì)。
圖的組成
圖數(shù)據(jù)庫(kù)是基于圖論為數(shù)據(jù)基礎(chǔ)的數(shù)據(jù)管理系統(tǒng)。它的組成包含點(diǎn)、邊。數(shù)據(jù)通過(guò)點(diǎn)和邊的形式進(jìn)行表示,把數(shù)據(jù)轉(zhuǎn)化成點(diǎn),數(shù)據(jù)間的關(guān)系轉(zhuǎn)化成邊。圖的存儲(chǔ)方式可以整合多源異構(gòu)數(shù)據(jù)。

點(diǎn):代表實(shí)體或?qū)嵗?,例如人員、企業(yè)、帳戶或要跟蹤的任何其他項(xiàng)目。它們大致相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的記錄、關(guān)系或行,或者文檔存儲(chǔ)數(shù)據(jù)庫(kù)中的文檔。
邊:也稱作關(guān)系,將節(jié)點(diǎn)連接到其他節(jié)點(diǎn)的線;代表節(jié)點(diǎn)之間的關(guān)系。在探索節(jié)點(diǎn)、屬性和邊的連接和互連時(shí),往往會(huì)得到意想不到的價(jià)值洞見。邊可以是有向的,也可以是無(wú)向的。在無(wú)向圖中,連接兩個(gè)節(jié)點(diǎn)的邊具有單一含義。在有向圖中,連接兩個(gè)不同節(jié)點(diǎn)的邊,根據(jù)它們的方向具有不同的含義。邊是圖數(shù)據(jù)庫(kù)中的關(guān)鍵概念,圖數(shù)據(jù)庫(kù)獨(dú)有的數(shù)據(jù)抽象概念,而關(guān)系型數(shù)據(jù)庫(kù)和文件型數(shù)據(jù)庫(kù)并沒(méi)有“邊”這一概念,它們的關(guān)系查詢必須在運(yùn)行時(shí)進(jìn)行具體化。
圖模型
圖模型主要包含屬性圖、RDF圖兩種。
屬性圖
屬性圖模型由頂點(diǎn)、邊及其屬性構(gòu)成。頂點(diǎn)和邊都可以帶有屬性,節(jié)點(diǎn)可以通過(guò)“標(biāo)簽(Label)”進(jìn)行分組。表示關(guān)系的邊總是從一個(gè)開始點(diǎn)指向一個(gè)結(jié)束點(diǎn),而且邊是一定是有方向的,這使得圖成為了有向圖。關(guān)系上的屬性可以為節(jié)點(diǎn)的關(guān)系提供額外的元數(shù)據(jù)和語(yǔ)義。

Resource Description Framework(RDF)
RDF模型在頂點(diǎn)和邊上沒(méi)有屬性,只有一個(gè)唯一的資源描述符,這是RDF與屬性圖模型間最根本的區(qū)別。在RDF中每增加一條信息都要用一個(gè)單獨(dú)的節(jié)點(diǎn)表示。比如,在圖中給表示人的節(jié)點(diǎn)添加姓名。在屬性圖中只需要在節(jié)點(diǎn)添加屬性即可,而在RDF中必須添加一個(gè)名字的單獨(dú)加節(jié)點(diǎn),并用hasName與原始節(jié)點(diǎn)相連。

我們講的圖數(shù)據(jù)庫(kù)通常是指支持屬性圖模型的數(shù)據(jù)管理系統(tǒng)。
針對(duì)圖數(shù)據(jù)的特點(diǎn),會(huì)在后續(xù)文中進(jìn)行展開。




