▕??作者:楊明皓,英國謝菲爾德大學(xué)碩士畢業(yè)。原海航集團(tuán)大數(shù)據(jù)相關(guān)技術(shù)負(fù)責(zé)人狐赡,海南大數(shù)據(jù)產(chǎn)業(yè)聯(lián)盟專家,現(xiàn)任普適智能COO;擅長大數(shù)據(jù)領(lǐng)域以及關(guān)系網(wǎng)絡(luò)領(lǐng)域技術(shù)颖侄,有著豐富的銀行金融業(yè)項(xiàng)目實(shí)施經(jīng)驗(yàn)鸟雏,并成功落地了多個(gè)基于知識圖譜技術(shù)的項(xiàng)目。
導(dǎo)讀
上期提到關(guān)系網(wǎng)絡(luò)技術(shù)發(fā)展览祖,本文將詳細(xì)講述圖數(shù)據(jù)庫的技術(shù)發(fā)展孝鹊。
關(guān)系網(wǎng)絡(luò)的數(shù)據(jù)需要完成基本的圖結(jié)構(gòu)數(shù)據(jù)存儲,同時(shí)也要支持上層應(yīng)用對關(guān)系網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行實(shí)時(shí)查詢展蒂,知識推理又活,離線大規(guī)模圖計(jì)算甚至是實(shí)時(shí)大規(guī)模圖計(jì)算等,所以專門針對關(guān)系網(wǎng)絡(luò)數(shù)據(jù)存儲做了優(yōu)化的圖數(shù)據(jù)庫成了關(guān)鍵的組件锰悼。目前工業(yè)界的圖數(shù)據(jù)庫基本都是基于帶標(biāo)簽的屬性圖結(jié)構(gòu)來設(shè)計(jì)的柳骄。
? 圖數(shù)據(jù)庫技術(shù)發(fā)展
1、圖數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫的區(qū)別
為什么要使用專門的圖數(shù)據(jù)庫來對關(guān)系網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行存儲箕般?這里必須提到圖數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫的區(qū)別耐薯。
關(guān)系型數(shù)據(jù)庫存儲的是一件客觀事實(shí)的描述,比如用戶購買了某件具體的商品丝里,客戶申請了一筆貸款曲初,它根據(jù)關(guān)系型數(shù)據(jù)庫的四范式設(shè)計(jì)原則構(gòu)建在關(guān)系模型之上。
關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫的主要差異是數(shù)據(jù)存儲的方式杯聚,關(guān)系型數(shù)據(jù)天然就是表格式的,因此存儲在數(shù)據(jù)表的行和列中臼婆。數(shù)據(jù)表可以彼此關(guān)聯(lián)協(xié)作存儲,也很容易提取數(shù)據(jù),尤其在查找某個(gè)區(qū)間內(nèi)的數(shù)據(jù)組很有優(yōu)勢幌绍,但是卻無法清晰直觀地體現(xiàn)出數(shù)據(jù)之間包含的潛在關(guān)系颁褂。
關(guān)系型數(shù)據(jù)庫是以實(shí)體建模這一基礎(chǔ)理念設(shè)計(jì)的。實(shí)體之間的關(guān)系需要創(chuàng)建一個(gè)關(guān)聯(lián)表來維護(hù)纷捞,當(dāng)需要描述大量關(guān)系時(shí)痢虹,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)不堪重負(fù);聯(lián)系確實(shí)存在于關(guān)系型數(shù)據(jù)庫自身的術(shù)語中主儡,但只出現(xiàn)在建模階段奖唯,作為連接表的手段,對于關(guān)聯(lián)關(guān)系卻什么都做不了糜值。所以圖數(shù)據(jù)庫經(jīng)過特別設(shè)計(jì)的數(shù)據(jù)存儲結(jié)構(gòu)丰捷,能加快實(shí)體之間的關(guān)系查詢,這就是圖數(shù)據(jù)庫的主要優(yōu)勢之一寂汇。
2病往、圖數(shù)據(jù)庫的發(fā)展
圖數(shù)據(jù)庫的發(fā)展主要有兩個(gè)階段。
第一個(gè)階段主要是解決關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的存儲骄瓣,查詢和分析問題停巷,能支持上層應(yīng)用對關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的OLTP業(yè)務(wù)需求以及離線大規(guī)模圖數(shù)據(jù)的OLAP業(yè)務(wù)需求。
第二階段的圖數(shù)據(jù)庫不光滿足OLTP業(yè)務(wù)和離線OLAP業(yè)務(wù),采用內(nèi)置的MPP計(jì)算引擎畔勤,實(shí)現(xiàn)實(shí)時(shí)大規(guī)模圖數(shù)據(jù)的OLAP業(yè)務(wù)蕾各。
DB-Engines網(wǎng)站2020年圖數(shù)據(jù)庫使用率排名
為了滿足關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的存儲,查詢和大規(guī)模圖分析的性能庆揪,圖數(shù)據(jù)庫在其底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)上也盡量貼合關(guān)系數(shù)據(jù)的搜索習(xí)慣式曲,減少磁盤的I/O時(shí)間。傳統(tǒng)關(guān)系型數(shù)據(jù)庫的B+樹數(shù)據(jù)結(jié)構(gòu)適合范圍數(shù)據(jù)的檢索以及隨機(jī)數(shù)據(jù)讀取上有優(yōu)秀的性能缸榛,而對于關(guān)系數(shù)據(jù)的遍歷則顯得相形見絀了吝羞。
圖數(shù)據(jù)庫針對關(guān)系網(wǎng)絡(luò)的數(shù)據(jù)特點(diǎn),采用了免索引領(lǐng)接内颗,鄰接表钧排,點(diǎn)邊數(shù)據(jù)以KCV的形式組織等等方式存儲關(guān)系網(wǎng)絡(luò)數(shù)據(jù),其根本目的在于對鄰邊和鄰節(jié)點(diǎn)的快速查詢遍歷均澳,減少隨機(jī)讀寫的磁盤尋道時(shí)間卖氨,提升關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的I/O性能。
原生圖數(shù)據(jù)庫不僅在數(shù)據(jù)存儲文件的組織形式上做了優(yōu)化负懦,在計(jì)算機(jī)物理存儲層面也充分利用內(nèi)存緩存來減少數(shù)據(jù)的讀取延遲甚至是提升寫入效率。
3柏腻、幾種典型圖數(shù)據(jù)庫的分析
NEO4J是最早在工業(yè)界大規(guī)模使用的圖數(shù)據(jù)庫纸厉,也是由NEO4J最早提出原生圖數(shù)據(jù)庫的概念,NEO4J認(rèn)為原生圖數(shù)據(jù)庫應(yīng)該具備原生圖存儲和免索引領(lǐng)接兩個(gè)特性五嫂。
原生圖存儲是指在存儲層面針對關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的存儲和管理而設(shè)計(jì)優(yōu)化的颗品;而免索引領(lǐng)接就是上面提到的,在搜索鄰邊和鄰節(jié)點(diǎn)時(shí)減少磁盤尋道時(shí)間提升I/O性能沃缘,NEO4J主要通過固定存儲單元大小以及雙向鏈表的技術(shù)來實(shí)現(xiàn)躯枢。
同時(shí)NEO4J也是非分布式的數(shù)據(jù)存儲和處理的圖數(shù)據(jù)庫,因?yàn)镹EO4J認(rèn)為單機(jī)下沒有分布式的網(wǎng)絡(luò)I/O和聚合操作所帶來的時(shí)間損耗槐臀,再加上對磁盤锄蹂,內(nèi)存和CPU的優(yōu)化,查詢性能可以達(dá)到最優(yōu)水慨。
即使是NEO4J的集群模式得糜,也是數(shù)據(jù)副本拷貝的形式,如果理解NEO4J存儲結(jié)構(gòu)的話也不難明白為什么其單機(jī)性能最優(yōu)晰洒。Neo4J同時(shí)提供了社區(qū)版和商業(yè)版朝抖。
Neo4J存儲端數(shù)據(jù)結(jié)構(gòu)
ArangoDB是基于C++的多數(shù)據(jù)模型數(shù)據(jù)庫,支持Document, K-V, Graph等多種數(shù)據(jù)模型的存儲谍珊。
ArangoDB和Wikipedia社區(qū)都反對了NEO4J提出的原生圖數(shù)據(jù)的定義治宣,他們認(rèn)為原生圖數(shù)據(jù)庫應(yīng)該是使用具有點(diǎn),邊和屬性表示的圖數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲和語義查詢的數(shù)據(jù)庫,而與內(nèi)部的數(shù)據(jù)文件存儲形式無關(guān)侮邀,更重要的應(yīng)該在于數(shù)據(jù)模型和算法的使用坏怪。
ArangoDB采用基于HASH和鏈表的混合索引形式組織圖數(shù)據(jù),Arango將所有的邊數(shù)據(jù)都存儲在一張大的哈希表中豌拙,同時(shí)將每個(gè)節(jié)點(diǎn)關(guān)聯(lián)的所有鄰邊都存儲在一個(gè)雙向鏈表中陕悬。該數(shù)據(jù)結(jié)構(gòu)在保證圖遍歷性能的同時(shí),對圖數(shù)據(jù)的修改和刪除也提供了很好的性能按傅。同時(shí)ArangoDB是支持橫向拓展的分布式數(shù)據(jù)庫捉超,并提供了社區(qū)版和商業(yè)版。
ArangoDB存儲端數(shù)據(jù)結(jié)構(gòu)
Titan是一個(gè)開源的分布式圖數(shù)據(jù)存儲引擎唯绍,向下支持多種基于Google Bigtable 的KCV數(shù)據(jù)模型的數(shù)據(jù)庫拼岳,包括 Apache Cassandra, Apache HBase况芒, Google Cloud Bigtable惜纸, Oracle BerkeleyDB;向上支持Gremlin 圖查詢語言對業(yè)務(wù)系統(tǒng)提供關(guān)系網(wǎng)絡(luò)數(shù)據(jù)查詢绝骚,同時(shí)兼容Spark 分布式計(jì)算框架耐版,提供對大規(guī)模關(guān)系網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行離線OLAP 分析。2015年Titan被DataStax公司收購压汪,進(jìn)行商業(yè)化改造粪牲,開源社區(qū)開發(fā)者新fork出一個(gè)分支,封裝成JanusGraph項(xiàng)目并持續(xù)維護(hù)止剖。
JanusGraph基于Google?Bigtable?的KCV數(shù)據(jù)模型設(shè)計(jì)腺阳,采用邊切割的方式存儲關(guān)系網(wǎng)絡(luò)數(shù)據(jù),將點(diǎn)的屬性穿香,邊的屬性亭引,鄰節(jié)點(diǎn)key信息存在一起封裝成KCV的數(shù)據(jù)結(jié)構(gòu),通過key進(jìn)行索引皮获,減少鄰邊和鄰節(jié)點(diǎn)的遍歷時(shí)間焙蚓。其關(guān)系網(wǎng)絡(luò)數(shù)據(jù)處理的時(shí)間復(fù)雜度還是需要根據(jù)其具體的存儲層組件來進(jìn)行分析,如果是采用HBase做為存儲端魔市,那顯而易見在關(guān)系網(wǎng)絡(luò)數(shù)據(jù)寫入方面會有一定的優(yōu)勢主届。
JanusGraph也是許多國內(nèi)一線大廠封裝自己圖數(shù)據(jù)庫的基本開源框架,基于商業(yè)敏感性這里也就不一一列舉了待德。國內(nèi)廠商對于JanusGraph的二次封裝優(yōu)化策略主要在于ID的分配機(jī)制君丁,邊的索引優(yōu)化等。
JanusGraph存儲端數(shù)據(jù)結(jié)構(gòu)
TigerGraph是商業(yè)圖數(shù)據(jù)庫将宪,其采用C++語言開發(fā)绘闷,在關(guān)系網(wǎng)絡(luò)數(shù)據(jù)的存儲和查詢方面做了物理層的優(yōu)化橡庞,充分使用了計(jì)算機(jī)的緩存資源,同時(shí)也提供了高壓縮比的數(shù)據(jù)存儲策略印蔗。
通過內(nèi)置圖存儲引擎和圖計(jì)算引擎并存的技術(shù)扒最,采用MPP計(jì)算模型,實(shí)現(xiàn)實(shí)時(shí)的OLAP分析华嘹。相比JanusGraph采用Spark框架實(shí)現(xiàn)MPP計(jì)算吧趣,TigerGraph的圖中每個(gè)頂點(diǎn)和邊同時(shí)作為存儲和計(jì)算的并行單元,能提供更高的計(jì)算效率和性能耙厚。
微軟的Azure云計(jì)算服務(wù)的Cosmos DB强挫,亞馬遜云計(jì)算服務(wù)的Neptune以及阿里云的GDB圖數(shù)據(jù)庫,都是各個(gè)云廠商推出的云上圖數(shù)據(jù)庫服務(wù)薛躬。目前俯渤,圖數(shù)據(jù)庫的技術(shù)發(fā)展還沒形成一套完整的工業(yè)標(biāo)準(zhǔn),但是隨著關(guān)系網(wǎng)絡(luò)技術(shù)的發(fā)展和普及八匠,多元化的圖數(shù)據(jù)庫共存在市場上的局面還暫時(shí)不會改變, 實(shí)時(shí)大規(guī)模關(guān)系網(wǎng)絡(luò)OLAP技術(shù)也將是未來發(fā)展的趨勢趴酣。
參考書籍:
[1]?圖數(shù)據(jù)庫lan Robinson, Jim Webber, Emil Eiferm?著?劉璐梨树,梁越譯
[2]?知識圖譜概念與技術(shù)?肖仰華?等編著
參考網(wǎng)絡(luò)材料:
[1]https://www.arangodb.com/2016/04/index-free-adjacency-hybrid-indexes-graph-databases?
[2]?https://www.cnblogs.com/zhangzl419/p/9100498.html
[3]?https://zhuanlan.zhihu.com/p/36183004
關(guān)于我們
▼
普適智能科技有限公司(簡稱:普適智能PUSHI AI)是一家專注于數(shù)據(jù)處理和知識圖譜技術(shù)的人工智能高科技公司,致力于為企業(yè)提供一站式認(rèn)知智能服務(wù)岖寞。
普適智能專注于技術(shù)創(chuàng)新型人才提供技術(shù)分享和學(xué)習(xí)內(nèi)容劝萤,使創(chuàng)新成為持續(xù)的核心競爭力。
如果您感興趣慎璧,歡迎加入PUSHI AI社群,共同探索AI跨释。關(guān)注普適智能并評論即可加入我們~