neo4j performance多个查询相同数据

neo4j performance多个查询相同数据,performance,graph,neo4j,cypher,Performance,Graph,Neo4j,Cypher,我正在解决数据库中一个复杂的寻路问题,这个问题无法用Cypher表示,因此我需要将其划分为多个查询(并编写一组复杂的递归函数)。 我的问题是关于在同一节点上执行多个查询的性能。当查询A返回一个节点X并且在下一个查询B中需要节点X时,告诉neo4j在查询B中查找节点X的最佳方式是什么 最简单的方法是为每个节点指定一个名称,然后在查询a中返回X.name并使用WHERE X.name=。。。在查询B中,我认为这非常慢,因为neo4j必须检查数据库中每个节点的每个名称。有没有更快的方法,或者这实际上是

我正在解决数据库中一个复杂的寻路问题,这个问题无法用Cypher表示,因此我需要将其划分为多个查询(并编写一组复杂的递归函数)。 我的问题是关于在同一节点上执行多个查询的性能。当查询A返回一个节点X并且在下一个查询B中需要节点X时,告诉neo4j在查询B中查找节点X的最佳方式是什么

最简单的方法是为每个节点指定一个名称,然后在查询a中返回X.name并使用WHERE X.name=。。。在查询B中,我认为这非常慢,因为neo4j必须检查数据库中每个节点的每个名称。有没有更快的方法,或者这实际上是最好的

编辑:因为这个问题可能不完全清楚,我将提供一些关于我正在解决的问题的更多信息

我想找一个对某项技能有最好知识的人,比如物理。在数据库中,物理和另一种技能(例如数学)之间存在联系,这表明数学知识对物理有用。但现在我需要知道每个人在数学方面有多熟练,这也是同样的过程。以递归方式执行这项操作是有意义的,但据我所知,Cypher中没有递归,因此我必须将其拆分为多个查询


我想阻止的是,当发现物理和数学之间的联系时,计算每个人的数学知识的函数不必通过数据库中的每个节点来找到name=‘math’的节点,这是非常低效的。

我不知道我是否完全理解了你的问题,但是我认为一个好的起点是在节点的
name
属性中创建一个。从文档中:

数据库索引是数据库中信息的冗余副本 为了使检索所述数据更加高效。这 这是以额外的存储空间和较慢的写入速度为代价的,因此 决定索引什么和不索引什么是一个重要且经常的问题 不平凡的任务


我试试这个!不确定它是否更快,因为我只需要很短的索引节点,索引可能也需要时间。@Jessemas是的。从文档中:请注意,索引不是立即可用的,但将在后台创建。我添加了一些关于该问题的更多信息,现在是否更清楚?@Jessemas您的问题现在更清楚了。但我认为您应该遵循logisima的建议,使用示例数据创建一个控制台。通过这种方式,我们可以更轻松地帮助您。您能告诉我们您的
最佳技能
查询,为什么不为此()创建一个图形控制台?我认为一次查询就可以做到这一点。为了响应您的第一个查询,最好的方法是通过其id检索节点,但您在同一事务中执行所有查询(neo4j的id被重用)。这个特殊问题确实可以用密码解决,但是这里的关系比我在这里描述的要多得多。我刚刚开始这个项目,所以我不能确切地告诉你数据是什么样子,关系类型是什么,但是这里有一个
CREATE INDEX ON :NodeLabel(name)