圖數(shù)據(jù)庫Titan運(yùn)行在多種數(shù)據(jù)庫之上的,這些數(shù)據(jù)庫都是亞馬遜Web服務(wù)支持的。很多人認(rèn)為圖數(shù)據(jù)庫僅對于社交應(yīng)用有用,比如Facebook或者LinkedIn。但是Titan也是亞馬遜Kiva系統(tǒng)用來管理其零售倉庫的主數(shù)據(jù)庫。而且由于亞馬遜倉庫系統(tǒng)可能是全球最大的倉庫系統(tǒng),關(guān)于零售巨頭如何使用這項(xiàng)技術(shù)值得一看,另外企業(yè)要看看如何用其同現(xiàn)有的AWS部署合作。Titan在設(shè)計(jì)應(yīng)用和倉庫之外也發(fā)展很好。
除了社交應(yīng)用之外,圖數(shù)據(jù)庫同很多應(yīng)用可以工作。很多應(yīng)用可以自然擴(kuò)展使用圖形類型的關(guān)系。比如,好多內(nèi)嵌在社交應(yīng)用中的推薦系統(tǒng)常常都是基于圖形的系統(tǒng)。圖數(shù)據(jù)庫由一系列結(jié)點(diǎn)和邊界組成;每一個(gè)結(jié)點(diǎn)代表了一個(gè)實(shí)體,每一個(gè)邊界代表了兩個(gè)結(jié)點(diǎn)之間的一種連接或者關(guān)系。圖數(shù)據(jù)庫,尤其是Titan易于安裝和集成。
Titan是一種基于NoSQL的數(shù)據(jù)庫。NoSQL是一種概括性術(shù)語,泛指所有非關(guān)系型數(shù)據(jù)庫。在這個(gè)范圍之下有多個(gè)不同的模型,每一個(gè)都有自己的優(yōu)點(diǎn)和缺點(diǎn)。Cassandra是另一種基于NoSQL的數(shù)據(jù)庫,天生適用于時(shí)間序列數(shù)據(jù),但是不適合處理關(guān)系結(jié)點(diǎn)網(wǎng)絡(luò)的即席查詢。在這樣的實(shí)例中,圖數(shù)據(jù)庫卻非常合適。
Titan組件和存儲(chǔ)引擎
技術(shù)上,Titan并不是數(shù)據(jù)庫;它是一個(gè)數(shù)據(jù)庫之上的客戶端庫。它依賴于下面的存儲(chǔ)引擎,比如Cassandra或者Hadoop,來存儲(chǔ)其數(shù)據(jù)。它也依賴于索引引擎,比如Lucene、ElasticSearch或者Solar,來執(zhí)行相關(guān)的查詢。因此,只要你的對戰(zhàn)中有這些技術(shù),就可以在上面添加Titan;實(shí)際上你不需要部署另一個(gè)分布式數(shù)據(jù)庫系統(tǒng)。這樣做就減少了額外開支,可以加速新技術(shù)的應(yīng)用。
Titan需要一個(gè)存儲(chǔ)引擎,因?yàn)檫@是用來存儲(chǔ)結(jié)點(diǎn)和邊界的。Cassandra和HBase都運(yùn)行在AWS上,而且支持大數(shù)據(jù)風(fēng)格的擴(kuò)展。亞馬遜關(guān)系數(shù)據(jù)服務(wù)和Aurora是所缺少的兩個(gè)存儲(chǔ)引擎;然而,在最近的波士頓AWS Meetup上,很多AWS用戶要求亞馬遜添加Aurora來支持Titan。像ElasticSearch、Lucene或者Solr這樣的索引后端進(jìn)行常規(guī)操作,但是需要執(zhí)行相關(guān)的查詢。一旦下載了Titan,你會(huì)得到運(yùn)行嵌入式存儲(chǔ)引擎和索引后端的配置。
開發(fā)者可以在邊界上增加屬性和語義,比如定義指令和基數(shù)。屬性可以讓開發(fā)者搜索關(guān)系的具體類型;指令和基數(shù)允許在數(shù)據(jù)上執(zhí)行域的語義。
開啟Titan圖數(shù)據(jù)庫
對于計(jì)劃在AWS上使用Titan的企業(yè)而言,開始在白板上畫一個(gè)應(yīng)用的主數(shù)據(jù)結(jié)構(gòu)是自家的方式,然后使用Gremlin命令行工具在圖表中創(chuàng)建結(jié)點(diǎn)和邊界。從這一點(diǎn)上看,你可以用Gremlin查詢界面,而且可能發(fā)現(xiàn)面向圖形的方法簡化了查詢。
另一個(gè)選擇是采用Titan的內(nèi)置數(shù)據(jù)庫,“The Graph of the Gods.”你可以下載一個(gè)數(shù)據(jù)庫,里面有完整一套“god”和“關(guān)系”,然后在那個(gè)數(shù)據(jù)庫閃剛運(yùn)行查詢。為了實(shí)現(xiàn)這一點(diǎn),啟動(dòng)gremlin,然而運(yùn)行g(shù)remlin> GraphOfTheGodsFactory.load(g)
你也可以運(yùn)行所有類型的查詢,比如:
saturn = g.V.has('name','saturn').next() to find a particular node or
saturn.in('father').in('father').name to find Saturn's grandchild (Hercules) or
hercules.out('father','mother')*.getVertexLabel() to find Hercules' parents.