我知道你不应该长期依赖ID作为节点的标识符,因为当你删除节点时,ID可能会重新分配给新节点(ref)。
Neo4j在删除节点和关系时会重用其内部ID。这意味着使用和依赖内部Neo4j ID的应用程序很脆弱或有出错的风险。因此建议使用应用程序生成的ID。
如果我理解正确的话,那么当你不能保证它是否已经被删除时,只通过它的id来查找节点/关系会让你处于危险之中。
如果通过我的应用程序设计,我可以保证具有某个ID的节点在查询ID后没有被删除,那么我可以使用这些ID吗?或者我可能会遇到一些问题?
我的用例是,我希望执行一个跨多个事务的复杂操作,并且我需要知道在该操作的第一个事务期间获得的节点ID是否是在该操作的最后一个事务期间识别该节点的有效方法。
2条答案
按热度按时间x33g5p2x1#
只要您确定具有给定ID的节点/关系不会被删除,就可以无限期地使用其本机ID。
因此,通常建议使用自己的标识属性。
uqdfh47h2#
我也有同样的问题,并偶然发现了neo4j中
ID()
函数的描述:当在特定于数据库的子查询中调用时,节点或关系的结果id值对于该数据库是本地的。来自不同数据库的节点或关系的本地id可能相同。
参考
因此,当访问集群中的节点时,ID不是一个选项。即使你打算使用单个示例,你也必须确保所有实体(节点和关系)都是永久持久化的。