使用cassandra和elasticsearch后端制作我的titan db图

我的问题是,我想将产品,客户和销售商数据存储在以cassandra作为存储后端和elasticsearch作为索引后端的titangraphics数据库中。 然后我会查询这些数据,向顾客和卖家提供build议。 我无法达到我可以存储自己的数据的地步。因为数据将是巨大的,我将使用cassandra和elasticsearch。

我到目前为止所做的是,我有cassandra,elasticsearch成立。 现在我可以运行bin / titan.sh启动启动cassandra,es和gremlin服务器我也可以用神数据图来玩

gremlin> graph = TitanFactory.open('conf/titan-cassandra-es.properties') ==>standardtitangraph[cassandrathrift:[127.0.0.1]] gremlin> GraphOfTheGodsFactory.load(graph) ==>null 

现在我试图find一种方法来存储我的产品,客户和销售商graphics数据。 这样它的存储在cassandra和索引上就是elasticsearch。

我应该采取什么措施来做到这一点。 我的项目的主要语言是nodejs和Java是由于项目的限制。

我的问题简而言之

  1. 如何存储我自己的数据为titanium的数据库进行处理
  2. 一旦数据可用于处理。 我会暴露一些http apis来提出build议。 在Java中写作由于一些限制而不成问题。 我应该如何继续(我想我只有gremlin作为替代)

如果你能指出我的错误,并朝正确的方向扔掉一些面包屑,我将不胜感激

如果你不能使用Java,那么你只能使用Groovy。 至于

如何存储我自己的数据为titanium的数据库进行处理

边注

用graphics数据库有很多方法来存储这些数据。 如果你想真正地forms化你的数据结构,我会build议寻找本体 , OWL和主题地图,这些可以作为如何在graphics数据库中forms化和结构化数据的巨大灵感。 如果您正在寻找非常正式地在graphics中构造数据的方法,这些读取就很好。

结构示例

现在让我们假设你只是想跟踪客户和他们购买的产品。 一个简单的结构是, 客户产品都是从客户到产品的边缘,作为客户购买该产品的事实。 我们甚至可以在购买时间数量等方面提供额外的数据。 下面是一个如何在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] 

以上基本上说,星期五鲍勃买了一些肉和鱼,而爱丽丝星期一买了一些肉。 如果我们想知道Bob在星期五买了什么,我们可以做下面的遍历

 gremlin> g.traversal().V().hasLabel("Bob").outE("purchased").has("Day", "Friday").otherV().label(); ==>Meat ==>Fish 

索引

在真正潜入索引之前,先了解一下结构。 以下是关于使用Elasticsearch和Titan进行索引的非常详细的解释:

关于索引,要知道泰坦有不同types的指数, CompositeVertex-CentricMixed都是为了达到目的,你应该阅读这个了解更多信息。

索引用于加快遍历和查找。 所以你需要决定索引什么。 对于我们的例子,我们想快速知道在不同的日子做的所有采购。 这意味着我们可以在边上放置一个混合指数来帮助我们(复合指标的服务也一样好,但是您正在询问elasticsearch,所以我们将使用混合指数)。

要定义一个混合索引,我们首先定义一个简单的模式(更多信息在这里 ):

 mgmt = graph.openManagement(); purchased = mgmt.makeEdgeLabel("purchased").multiplicity(MULTI).make(); day = mgmt.makePropertyKey("Day").dataType(String.class).make(); 

您不需要为所有内容明确定义模式,但是对于任何想要索引的模式而言都是必不可less的。 现在你可以创build你的索引:

 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") 

会快得多。

注意 :您应该在加载数据之前创build索引和模式。 从长远来看,这只会让事情变得更简单。

由于您的主要语言是JavaScript / Node.js,因此您可以使用https://www.npmjs.com/package/gremlin这是TinkerPop3 Gremlin Server的WebSocket客户端(免责声明:库作者在这里)。 您使用客户端将Gremlin-Groovy查询string发送到远程Gremlin服务器。

与graphics交互的最基本的方式是:

 import { createClient } from 'gremlin'; const client = createClient(8182, 'localhost'); client.execute('gV()', (err, results) => { // handle err or results } 

文档中有更多高级模式。 客户端还支持绑定参数,以提高安全性和性能。

现在评论您的域名和数据build模可能为时过早,所以我只是坚持问题的环境部分,以便让您开始。