Neo4j - 按ID查找节点 - 如何获取查询ID?

时间:2016-07-06 09:32:47

标签: indexing neo4j graph-databases

我希望能够出于性能原因通过它的ID找到特定节点(ID比索引更有效)

为了执行以下示例:

MATCH (s)
WHERE ID(s) = 65110
RETURN s

我需要节点的ID(本例中为65110)

但我怎么得到它?由于ID是自动生成的,因此在不查询图形的情况下找不到ID是不可能的,因为我已经拥有了节点,所以这种目的会失败。

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

TL; DR:使用索引属性进行查找,除非您绝对需要优化并可以衡量差异。

通常,您使用索引查找作为图形的入口点,即获取提供边缘遍历开始的节点。虽然Neo4j节点ID的类似指针的性质意味着它们在理论上更快,但索引查找也非常有效,所以除非你确定它会产生可测量的差异,否则你不应该在性能方面对它们进行折扣。

您还应该考虑 Neo4j节点ID不稳定。如果删除节点,将来可能会重新使用相同的ID。出于这个原因,它们应该被视为一个内部实现细节,而不应该被视为应用程序外部接口的一部分。

也就是说,我有一个应用程序将Solo索引中的Neo4j ID存储在批量查找节点中,但这个索引被认为是volatile,节点还包含一个索引的,应用程序生成的UUID属性(具有唯一约束)这是他们的主要“主要关键”。

进一步阅读和讨论:https://github.com/neo4j/neo4j/issues/258