一、圖數(shù)據(jù)庫(kù)
優(yōu)點(diǎn)
1、圖數(shù)據(jù)庫(kù)可以很高效的插入大量數(shù)據(jù)。圖數(shù)據(jù)庫(kù)面向的應(yīng)用領(lǐng)域數(shù)據(jù)量可能都比較大,比如知識(shí)圖譜、社交關(guān)系、風(fēng)控關(guān)系等,總數(shù)據(jù)量級(jí)別一般在億或十億以上,有的甚至達(dá)到百億邊。mysql不做分表分庫(kù)的情況下插入百萬(wàn)數(shù)據(jù)基本就慢到不行,圖數(shù)據(jù)庫(kù)基本能勝任億級(jí)以上的數(shù)據(jù),比如neo4j、titan(janus)、hugegraph等圖數(shù)據(jù)庫(kù),持續(xù)插入十億級(jí)的數(shù)據(jù)基本還能保持在一個(gè)較高的速度。
2、圖數(shù)據(jù)庫(kù)可以很高效的查詢關(guān)聯(lián)數(shù)據(jù)。傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)不擅長(zhǎng)做關(guān)聯(lián)查詢,特別是多層關(guān)聯(lián)(比如查我的好友的好友有哪些人),因?yàn)橐话銇?lái)說(shuō)都需要做表連接,表連接是一個(gè)很昂貴的操作,涉及到大量的IO操作及內(nèi)存消耗。圖數(shù)據(jù)庫(kù)對(duì)關(guān)聯(lián)查詢一般都進(jìn)行針對(duì)性的優(yōu)化,比如存儲(chǔ)模型上、數(shù)據(jù)結(jié)構(gòu)、查詢算法等,防止局部數(shù)據(jù)的查詢引發(fā)全部數(shù)據(jù)的讀取。
3、圖數(shù)據(jù)庫(kù)提供了針對(duì)圖檢索的查詢語(yǔ)言,比如Gremlin、Cypher等圖數(shù)據(jù)庫(kù)語(yǔ)言。圖查詢語(yǔ)言大大方便了關(guān)聯(lián)分析業(yè)務(wù)的持續(xù)開發(fā),傳統(tǒng)方案在需求變更時(shí)往往要修改數(shù)據(jù)存儲(chǔ)模型、修改復(fù)雜的查詢腳本,圖數(shù)據(jù)庫(kù)已經(jīng)把業(yè)務(wù)表達(dá)抽象好了。
選擇
實(shí)際上開源的、流行的圖數(shù)據(jù)庫(kù)就只有以下幾種:
Neo4jOrientDBArangoDBJanusGraphDgraphNeo4j就不說(shuō)了,基本是圖數(shù)據(jù)庫(kù)這塊的領(lǐng)跑者,但實(shí)話實(shí)說(shuō),費(fèi)用也不低,因此需要慎重考慮,如果是土豪,當(dāng)我沒(méi)說(shuō)。
OrientDB和ArangoDB都是老牌的圖數(shù)據(jù)庫(kù)了,正因?yàn)樵纾阅兀蚣芎图軜?gòu)有點(diǎn)老,因?yàn)槭菑膯螜C(jī)版拓展而來(lái)的,對(duì)于集群和分布式支持的不是那么舒服。但瑕不掩瑜。
JanusGraph和Dgraph是比較新的,對(duì)分布式和集群支持還行,費(fèi)用也不高。
另外,特別提一下:TigerGraph,是最貼合中國(guó)國(guó)情的圖數(shù)據(jù)庫(kù)系統(tǒng),目前在國(guó)內(nèi)用的還不錯(cuò)。
延伸閱讀:
二、圖數(shù)據(jù)庫(kù)主要特點(diǎn)
存儲(chǔ)計(jì)算分離
對(duì)于 Nebula Graph 來(lái)講,有這么幾個(gè)技術(shù)特點(diǎn):名列前茅個(gè)就是采用了存儲(chǔ)計(jì)算分離的架構(gòu)。這樣架構(gòu)主要的考慮其實(shí)前面幾個(gè) Talk大家都已經(jīng)討論了很多,主要好處就是為了上云或者說(shuō) 彈性 , 方便單獨(dú)擴(kuò)容 。上午的 Talk:HBase on Cloud 也有提到,業(yè)務(wù)水位總是很難預(yù)測(cè)的,一段時(shí)間存儲(chǔ)不夠了,有些時(shí)候計(jì)算不夠了。在云上或者使用容器技術(shù),計(jì)算存儲(chǔ)分離的架構(gòu)運(yùn)維起來(lái)會(huì)比較方便,成本也更好控制。大家使用 HBase 那么久,這方面的感觸肯定很多。
查詢語(yǔ)言 nGQL
Nebula Graph 的第二個(gè)技術(shù)特點(diǎn)是它的查詢語(yǔ)言,我們稱為 nGQL,比較接近 SQL。少數(shù)大一點(diǎn)的語(yǔ)法差異就是 不用嵌套 (embedding)。大家都知道嵌套的 SQL,讀起來(lái)是非常痛苦的,要從里向外讀。
支持多種后端存儲(chǔ)
第三個(gè)特點(diǎn)就是 Nebula Graph 支持多種后端存儲(chǔ),除了原生的引擎外,也支持 HBase。因?yàn)楹芏嘤脩簦瑢?duì) HBase 已經(jīng)相當(dāng)熟悉了,并不希望多一套存儲(chǔ)架構(gòu)。從架構(gòu)上來(lái)說(shuō),Nebula Graph 是完全對(duì)等的分布式系統(tǒng)。
計(jì)算下推
和 HBase 的 CoProcessor 一樣,Nebula Graph 支持?jǐn)?shù)據(jù)計(jì)算下推。數(shù)據(jù)過(guò)濾,包括一些簡(jiǎn)單的聚合運(yùn)算,能夠在存儲(chǔ)層就做掉,這樣對(duì)于性能來(lái)講能提升會(huì)非常大。