Neo4j中的自动增量属性

时间:2015-04-03 14:24:33

标签: neo4j language-agnostic

据我所知,Neo4j(ID(node))给出的ID不稳定,其行为有点像SQL中的行号。由于ID主要用于SQL中的关系,并且这些ID很容易在Neo4j中建模,因此ID似乎没有多大用处,但是如何解决特定节点的检索?拥有一个应该为每个节点提供唯一路由的REST API(例如/api/concept/23)似乎是Web应用程序的一个非常标准的案例。 但是,尽管它是如此根本,我找到的唯一可行的方法是通过

  • 语言特定框架
  • 作为保持增量的未连接节点:
// get unique id
MERGE (id:UniqueId{name:'Person'})
ON CREATE SET id.count = 1
ON MATCH SET id.count = id.count + 1
WITH id.count AS uid
// create Person node
CREATE (p:Person{id:uid,firstName:'Gabriel',lastName:'Smith'})
RETURN p AS person

来源: http://www.neo4j.org/graphgist?8012859

真的没有更简单的方法,如果没有,有什么特别的原因吗?在Neo4j的背景下,我的方法是反模式吗?

1 个答案:

答案 0 :(得分:6)

Neo4j内部ID比sql行id更稳定,因为它们在交易期间永远不会改变,例如。

确实不建议将它们暴露在外部使用。我知道Neo内部有一些意图来实现这样的功能。

基本上人们倾向于使用两种解决方案:

  1. 在PHP应用程序级别使用UUID生成器:https://packagist.org/packages/rhumsaa/uuid并在所有节点上添加标签/ uuid唯一约束。

  2. 使用像https://github.com/graphaware/neo4j-uuid这样非常少的Neo4j插件,可以动态添加uuid属性,因此它可以减轻您在应用程序级别处理它的负担,并且更容易管理持久性状态您的节点对象

相关问题