当前位置: 首页 > 面试题库 >

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

敖永丰
2023-03-14
问题内容

我的问题是我想将产品,客户和卖方数据存储在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。至于

如何存储我自己的数据供泰坦数据库处理

边注

使用图形数据库,可以使用多种方式存储此数据。如果您想真正形式化数据的结构,我建议您研究一下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具有不同类型的索引, 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")

会更快。

注意 :加载数据之前,应先创建索引和架构。从长远来看,这只会使事情变得简单。



 类似资料:
  • 我正在学习NoSQL,并为我的客户的一个需求寻找不同的选择。在提出这个问题之前,我已经查阅了各种资源(一个对NoSQL一知半解的人) null 而最擅长索引(由Lucene支持),可以通过抛出一些随机文本来随机搜索数据。但是,即使我想检索的数据,它的工作是否也一样(我预计可能是这样)。但真正的问题是,它是一个搜索引擎,还是像Cassandra一样完美的NoSQL数据存储?如果是,为什么我们还需要卡

  • 问题内容: 我正在学习NoSQL,并正在为客户的需求之一寻找不同的选择。在提出这个问题之前,我已经遍历了各种资源(对NoSQL不太了解的人) 我需要以更快的速度存储数据并读取数据。 完全故障安全且易于扩展。 能够搜索数据以获取Google Analytics(分析)。 最后我列出了以下内容: 我所了解的是,Cassandra对我来说是一个完美的NoSQL存储解决方案,因为我可以使用索引写入数据和读

  • 我对Cassandra来说是个新手,这篇文章解释了分片和复制,我被困在了一个点上- 我在本地计算机上配置了一个包含6个Cassandra节点的集群。我创建了一个新的关键字空间“TestKeyspace”,复制因子为6,并在关键字空间“Employee”中创建了一个表,主键是名为rid的自动增量数字。我无法理解这些数据将如何分区和复制。我想知道的是,既然我将复制因子保持为6,并且数据将分布在多个节点

  • 问题内容: 看起来Elasticsearch支持模糊查询(http://www.elasticsearch.org/guide/reference/query- dsl/fuzzy-query/ ),但我想不出办法让django-haystack通过该选项。 我研究了django-haystack搜索,在使用elasticsearch后端时,好像在使用“ match_all”查询。是否有可能获得模

  • 当我试图在前端使用socketio客户端连接到后台时,它显示出错误,从起源'http://localhost:8080/socket.io/?eio=4&transport=polling&t=nok7aq9'访问XMLHttpRequest已被CORS策略阻止:对飞行前请求的响应没有通过访问控制检查:请求的资源上没有'access-control-allog-origin'标头。

  • 问题内容: 我在让NEST的DeleteByQuery方法工作时遇到了一些困难。 很简单,查询永远找不到要删除的内容,我也不知道为什么。我正在使用相同的查询来返回记录(使用搜索),并且一切正常。 我只是刚刚开始使用NEST,所以我确定这是一个非常简单的问题,而且我有点昏暗! 任何帮助/建议,不胜感激。 问题答案: 的是上的.NET方法支票是否相等。 如果您更改对它的呼叫,则应该可以使用。