[英]Making my titan db graph with cassandra and elasticsearch backend
我的問題是我想將產品,客戶和賣方數據存儲在titan圖形數據庫中,該數據庫具有cassandra作為存儲后端,而elasticsearch作為索引后端。 然后,我將查詢該數據以向客戶和賣方提出建議。 我無法存儲自己的數據。由於數據將非常龐大,因此我將使用cassandra和elasticsearch。
到目前為止,我已經完成了cassandra和elasticsearch的設置。 現在,我可以運行bin / titan.sh start來啟動cassandra,es和gremlin服務器,我還可以通過以下方式使用神數據圖
gremlin> graph = TitanFactory.open('conf/titan-cassandra-es.properties')
==>standardtitangraph[cassandrathrift:[127.0.0.1]]
gremlin> GraphOfTheGodsFactory.load(graph)
==>null
現在,我試圖找到一種存儲我的產品,客戶和賣方圖形數據的方法。 這樣就可以將其存儲在cassandra和索引上進行elasticsearch。
我應該采取什么步驟來做到這一點。 我的主要項目語言是nodejs,由於項目限制,java毫無疑問。
我的問題簡而言之
如果您能指出我的錯誤並朝正確的方向放一些面包屑,我將不勝感激
如果您不能使用Java,則只能使用Groovy。 至於
如何存儲我自己的數據供泰坦數據庫處理
邊注
使用圖形數據庫,可以使用多種方式存儲此數據。 如果要真正形式化數據的結構,我建議您研究一下Ontologies , OWL和Topic Maps,它們可以為如何形式化和構造圖形數據庫中的數據提供很大的啟發。 僅當您尋找在圖形中非常正式地構造數據的方式時,這些讀取才有用。
結構實例
現在讓我們假設你只想跟蹤客戶和他們所購買的產品 。 一個簡單的結構是, 客戶和產品都是具有從客戶到產品的優勢的頂點,這是客戶購買了該產品的事實。 我們甚至可以在該邊緣添加其他數據,例如購買時間和數量 。 這是如何在Groovy中執行此操作的示例:
g = TitanFactory.open("titan-cassandra-es.properties")
gremlin> customerBob = g.addVertex("Bob");
==>v[12]
gremlin> customerAlice = g.addVertex("Alice");
==>v[13]
gremlin> productFish = g.addVertex("Fish");
==>v[14]
gremlin> productMeat = g.addVertex("Meat");
==>v[15]
gremlin> edge = customerBob.addEdge("purchased", productMeat, "Day", "Friday", "Qauntity", 2);
==>e[16][12-purchased->15]
gremlin> edge = customerBob.addEdge("purchased", productFish, "Day", "Friday", "Qauntity", 1);
==>e[17][12-purchased->14]
gremlin> edge = customerAlice.addEdge("purchased", productMeat, "Day", "Monday", "Qauntity", 3);
==>e[18][13-purchased->15]
以上基本上說鮑勃在星期五買了一些肉和魚,而愛麗絲在星期一買了一些肉。 如果我們想了解鮑勃星期五買的東西,可以進行以下遍歷
gremlin> g.traversal().V().hasLabel("Bob").outE("purchased").has("Day", "Friday").otherV().label();
==>Meat
==>Fish
索引編制
在真正深入索引之前,請先了解結構。 以下是對使用Elasticsearch和Titan進行索引的非常簡要的說明:
關於索引,要知道titan具有不同類型的索引, Composite , Vertex-Centric和Mixed都有其用途,您應該閱讀這篇以獲得更多信息。
索引用於加速遍歷和查找。 因此,您需要確定要編制索引的內容。 對於我們的示例,我們想快速了解在不同日期進行的所有購買。 這意味着我們可以在邊緣放置混合索引以幫助我們(復合索引同樣有用,但是您在詢問Elasticsearch,因此我們將使用混合索引)。
要定義混合索引,我們首先定義一個簡單的架構(更多信息在此處 ):
mgmt = graph.openManagement();
purchased = mgmt.makeEdgeLabel("purchased").multiplicity(MULTI).make();
day = mgmt.makePropertyKey("Day").dataType(String.class).make();
您無需為所有內容顯式定義架構,但是它對於您要索引的任何內容都是必不可少的。 現在您可以創建索引:
mgmt.buildIndex("productsPurchased", Edge.class).addKey(day).buildMixedIndex("search")
mgmt.commit() //"search" is defined in your titan-conf.properties file
使用此索引查詢,例如:
g.traversal().E().has("Day", "Friday")
會更快。
注意 :加載數據之前,應先創建索引和架構。 從長遠來看,這只會使事情變得簡單。
因為您的主要語言是JavaScript / Node.js,所以您可以使用https://www.npmjs.com/package/gremlin ,它是TinkerPop3 Gremlin Server的WebSocket客戶端(免責聲明:此處的庫作者)。 您可以使用客戶端將Gremlin-Groovy查詢字符串發送到遠程Gremlin Server。
與圖進行交互的最基本方法是:
import { createClient } from 'gremlin';
const client = createClient(8182, 'localhost');
client.execute('g.V()', (err, results) => {
// handle err or results
}
文檔中詳細介紹了更多高級模式。 客戶端還支持綁定參數,以提高安全性和性能。
現在就對您的域和數據建模發表評論還為時過早,因此為了讓您入門,我將堅持您問題的環境部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.