相当于RDBMS序列(自动编号)

时间:2014-05-20 08:47:30

标签: neo4j

如何在Neo4j中实现相当于RDBMS用户定义的序列(自动编号)?

例如,在Oracle中,可以定义一个序列:

CREATE SEQUENCE sequence_name
  MINVALUE value
  MAXVALUE value
  START WITH value
  INCREMENT BY value
  CACHE value;

要获得下一个号码,请拨打sequence_name.NEXTVAL

该机制必须提供高级别的并发性并确保唯一的数字。

另外,我注意到节点和关系id遵循从零开始的序列。有没有办法操纵这个"内置序列"?有时,当我们从其他站点的数据库导入数据时,我们维护ID(设置序列范围,以便来自不同站点的ID永远不会发生冲突) - 可以插入一个节点并提供它必须承担的ID吗?或者是否应该让neo4j执行自己的id编号并在表示其他id的节点上添加属性?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用MERGE语句来模拟序列:

MERGE (n:Counter {name:'sequence_name'}) 
ON CREATE SET n.count=0
ON MATCH SET n.count = n.count+1
RETURN n.count as count

内部ID无法调整,因为它们表示商店文件中的偏移量。如果您需要任何编号方案,请不要依赖节点ID,它们是一个实现细节。