我希望能够出于性能原因通过它的ID找到特定节点(ID比索引更有效)
为了执行以下示例:
MATCH (s)
WHERE ID(s) = 65110
RETURN s
我需要节点的ID(本例中为65110)
但我怎么得到它?由于ID是自动生成的,因此在不查询图形的情况下找不到ID是不可能的,因为我已经拥有了节点,所以这种目的会失败。
我错过了什么吗?
答案 0 :(得分:4)
TL; DR:使用索引属性进行查找,除非您绝对需要优化并可以衡量差异。
通常,您使用索引查找作为图形的入口点,即获取提供边缘遍历开始的节点。虽然Neo4j节点ID的类似指针的性质意味着它们在理论上更快,但索引查找也非常有效,所以除非你确定它会产生可测量的差异,否则你不应该在性能方面对它们进行折扣。
您还应该考虑 Neo4j节点ID不稳定。如果删除节点,将来可能会重新使用相同的ID。出于这个原因,它们应该被视为一个内部实现细节,而不应该被视为应用程序外部接口的一部分。
也就是说,我有一个应用程序将Solo索引中的Neo4j ID存储在批量查找节点中,但这个索引被认为是volatile,节点还包含一个索引的,应用程序生成的UUID属性(具有唯一约束)这是他们的主要“主要关键”。