和零售巨頭學(xué)如何在AWS上運(yùn)行圖數(shù)據(jù)庫Titan
圖數(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)于零售巨頭如何使用這項技術(shù)值得一看,另外企業(yè)要看看如何用其同現(xiàn)有的AWS部署合作。Titan在設(shè)計應(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é)點和邊界組成;每一個結(jié)點代表了一個實體,每一個邊界代表了兩個結(jié)點之間的一種連接或者關(guān)系。圖數(shù)據(jù)庫,尤其是Titan易于安裝和集成。
Titan是一種基于NoSQL的數(shù)據(jù)庫。NoSQL是一種概括性術(shù)語,泛指所有非關(guān)系型數(shù)據(jù)庫。在這個范圍之下有多個不同的模型,每一個都有自己的優(yōu)點和缺點。Cassandra是另一種基于NoSQL的數(shù)據(jù)庫,天生適用于時間序列數(shù)據(jù),但是不適合處理關(guān)系結(jié)點網(wǎng)絡(luò)的即席查詢。在這樣的實例中,圖數(shù)據(jù)庫卻非常合適。
Titan組件和存儲引擎
技術(shù)上,Titan并不是數(shù)據(jù)庫;它是一個數(shù)據(jù)庫之上的客戶端庫。它依賴于下面的存儲引擎,比如Cassandra或者Hadoop,來存儲其數(shù)據(jù)。它也依賴于索引引擎,比如Lucene、ElasticSearch或者Solar,來執(zhí)行相關(guān)的查詢。因此,只要你的對戰(zhàn)中有這些技術(shù),就可以在上面添加Titan;實際上你不需要部署另一個分布式數(shù)據(jù)庫系統(tǒng)。這樣做就減少了額外開支,可以加速新技術(shù)的應(yīng)用。
Titan需要一個存儲引擎,因為這是用來存儲結(jié)點和邊界的。Cassandra和HBase都運(yùn)行在AWS上,而且支持大數(shù)據(jù)風(fēng)格的擴(kuò)展。亞馬遜關(guān)系數(shù)據(jù)服務(wù)和Aurora是所缺少的兩個存儲引擎;然而,在最近的波士頓AWS Meetup上,很多AWS用戶要求亞馬遜添加Aurora來支持Titan。像ElasticSearch、Lucene或者Solr這樣的索引后端進(jìn)行常規(guī)操作,但是需要執(zhí)行相關(guān)的查詢。一旦下載了Titan,你會得到運(yùn)行嵌入式存儲引擎和索引后端的配置。
開發(fā)者可以在邊界上增加屬性和語義,比如定義指令和基數(shù)。屬性可以讓開發(fā)者搜索關(guān)系的具體類型;指令和基數(shù)允許在數(shù)據(jù)上執(zhí)行域的語義。
開啟Titan圖數(shù)據(jù)庫
對于計劃在AWS上使用Titan的企業(yè)而言,開始在白板上畫一個應(yīng)用的主數(shù)據(jù)結(jié)構(gòu)是自家的方式,然后使用Gremlin命令行工具在圖表中創(chuàng)建結(jié)點和邊界。從這一點上看,你可以用Gremlin查詢界面,而且可能發(fā)現(xiàn)面向圖形的方法簡化了查詢。
另一個選擇是采用Titan的內(nèi)置數(shù)據(jù)庫,“The Graph of the Gods.”你可以下載一個數(shù)據(jù)庫,里面有完整一套“god”和“關(guān)系”,然后在那個數(shù)據(jù)庫閃剛運(yùn)行查詢。為了實現(xiàn)這一點,啟動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.
原文鏈接:http://www.searchcloudcomputing.com.cn/showcontent_87968.htm
























