如何在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的节点上添加属性?
感谢。
答案 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,它们是一个实现细节。