Indexing 如何穿越&;使用Cassandra作为后端查询图形?

Indexing 如何穿越&;使用Cassandra作为后端查询图形?,indexing,apache-spark,cassandra,graph-databases,titan,Indexing,Apache Spark,Cassandra,Graph Databases,Titan,我有数百万个节点存储在Titan 1.0.0中,带有Cassandra2.2.4。我想从Cassandra检索图形,并以快速的方式查询或遍历它 如果我在代码中建立索引 mgmt.buildIndex("nameSearchIndex", Vertex.class).addKey(namep, Mapping.TEXT.asParameter()).buildMixedIndex("search"); mgmt.buildIndex("addressSearchIndex", Vertex.cla

我有数百万个节点存储在Titan 1.0.0中,带有Cassandra2.2.4。我想从Cassandra检索图形,并以快速的方式查询或遍历它

如果我在代码中建立索引

mgmt.buildIndex("nameSearchIndex", Vertex.class).addKey(namep, Mapping.TEXT.asParameter()).buildMixedIndex("search");
mgmt.buildIndex("addressSearchIndex", Vertex.class).addKey(addressp, Mapping.TEXT.asParameter()).buildMixedIndex("search");
但查询速度似乎较慢

当我使用

g.traversal().V().count() 
它仍然给出了警告-当我已经在代码中构建索引时,请使用索引。是否有强制激活索引的特定配置?如何使用索引查询图形

g.traversal().V().has("Name","Jason") 
此查询是否使用索引?如果没有,那么如何利用索引更快地查询

Spark可以用于快速遍历吗?如何使用SparkComputerGraph?我无法找到使用Spark的CassnarainPutFormat的配置


谢谢。

这个问题中有很多问题

您正在创建的索引是混合索引,由外部索引系统(如Solr或ElasticSearch)实现。如果您正在查找具有特定名称的顶点,例如您的
.has(“name”,“Jason”)
示例,则这些选项会有所帮助

要了解是否正在使用索引,我建议查看Gremlin中的
profile()
步骤。您可以


Spark用于可能需要加载一个大于一台机器所能容纳的图形的遍历。什么用例是
.V().count()
重要的?

这个答案被交叉贴在Titan上

索引对于快速遍历非常有用,但最终“快速查询”取决于许多因素,包括您的图形模型/体积/形状以及您试图回答的问题类型

阅读Titan文档中的第8章,了解不同类型之间的差异:复合、混合和以顶点为中心

根据您发布的示例查询,正如Daniel所指出的,它在我看来就像一个完全匹配的查询类型,因此我将从一个复合索引开始。您可以剪切并粘贴它,在Titan控制台中进行尝试

graph = TitanFactory.open('inmemory')
mgmt = graph.openManagement()
name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SINGLE).make()
nameIndex = mgmt.buildIndex('nameIndex',Vertex.class).addKey(name).buildCompositeIndex()
mgmt.commit()
graph.addVertex('name','jason')
g = graph.traversal()
g.V().has('name','jason') // no warning should appear
如果在阅读本节之后,您认为混合索引(由Elasticsearch、Solr或Lucene支持)是您真正需要的,请阅读第20章“文本、字符串和文本字符串之间的映射差异”

下面是一个使用字符串混合索引的示例

graph = TitanFactory.build().set('storage.backend','inmemory').set('index.search.backend','elasticsearch').open()
mgmt = graph.openManagement()
name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SINGLE).make()
nameIndex = mgmt.buildIndex('nameIndex',Vertex.class).addKey(name, Mapping.STRING.asParameter()).buildMixedIndex("search")
mgmt.commit()
graph.addVertex('name','jason')
g = graph.traversal()
g.V().has('name','jason') // no warning should appear

感谢回复。我已经创建了大量顶点,现在我想使用查询和遍历在这些顶点的顶部执行一些分析。我需要更快。现在,即使我按照指定的代码构建索引,当我使用has(“Name”,“Jason”)时,它也不使用索引,它警告使用索引。是否有任何配置需要我明确指定?Titan提供的索引,我们如何使用它们?Jason的回答提供了您要查找的特定索引的详细信息。