具有根节点计数器的树的Neo4j唯一ID?

时间:2015-06-12 16:11:51

标签: neo4j uniqueidentifier

在根节点上使用带有计数器的树,在创建新节点时要引用和递增,这是在Neo4j中管理唯一ID的可行方法吗?在之前关于该论坛性能的问题(Neo4j merge performance VS create/set)中,描述了该方法,并且我想到它可能会建议一种独特的ID管理方法,而无需扩展Neo4j数据库(并支持该扩展)。但是,我注意到在关于唯一ID管理(Best practice for unique IDs in Neo4J and other databases?)的最佳实践的其他讨论中没有提到这种方法。

任何人都可以帮助确认或拒绝此方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以创建一个单例节点(我将在我的示例中为其指定标签IdCounter)以保存"下一个有效的ID计数器"值。没有必要将它作为任何树的一部分"或者它有任何关系。

创建单例时,使用您要使用的第一个id值初始化它。例如:

CREATE (:IdCounter {nextId: 1});

以下是创建新节点时如何使用它的简单示例。

MATCH (c:IdCounter)
CREATE (x {id: c.nextId})
SET c.nextId = c.nextId + 1
RETURN x;

由于所有Cypher查询都是事务性的,如果节点创建由于任何原因没有发生,那么nextId增量也不会完成,因此您永远不应该在分配的ID号中留下任何空白。< / p>

但是,为了避免重复使用相同的ID号,您必须仔细编写查询,以确保每当您创建新节点时都会发生增量(使用CREATECREATE UNIQUE,或MERGE)。