簡體   English   中英

使用cassandra和elasticsearch后端制作我的Titan db圖

[英]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毫無疑問。

我的問題簡而言之

  1. 如何存儲我自己的數據供泰坦數據庫處理
  2. 一旦數據可供處理。 我將公開一些http api來提出建議。 由於某些限制,用Java編寫文字毫無疑問。 我應該如何進行(我認為我只有格雷姆林作為替代品)

如果您能指出我的錯誤並朝正確的方向放一些​​面包屑,我將不勝感激

如果您不能使用Java,則只能使用Groovy。 至於

如何存儲我自己的數據供泰坦數據庫處理

邊注

使用圖形數據庫,可以使用多種方式存儲此數據。 如果要真正形式化數據的結構,我建議您研究一下OntologiesOWLTopic 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具有不同類型的索引, CompositeVertex-CentricMixed都有其用途,您應該閱讀這篇以獲得更多信息。

索引用於加速遍歷和查找。 因此,您需要確定要編制索引的內容。 對於我們的示例,我們想快速了解在不同日期進行的所有購買。 這意味着我們可以在邊緣放置混合索引以幫助我們(復合索引同樣有用,但是您在詢問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM