neo4j language-agnostic

neo4j - cypher reference manual



Propiedad de incremento automático en Neo4j (1)

Los identificadores internos de Neo4j son un poco más estables que los identificadores de fila sql, ya que nunca cambiarán durante una transacción, por ejemplo

Y de hecho, no se recomienda exponerlos para uso externo. Sé que hay algunas intenciones en los internos de Neo para implementar tal característica.

Básicamente, la gente tiende a usar dos soluciones para esto:

  1. Usando un generador de UUID en el nivel de aplicación como PHP: https://packagist.org/packages/rhumsaa/uuid y agregue una etiqueta / uuid restricción única en todos los nodos.

  2. Usando un plugin de Neo4j muy útil como https://github.com/graphaware/neo4j-uuid que agregará propiedades de uuid sobre la marcha, por lo que le quitará la carga de manejarlo a nivel de aplicación y es más fácil administrar la persistencia estado de sus objetos nodo

Por lo que yo entiendo, las identificaciones proporcionadas por Neo4j ( ID(node) ) son inestables y se comportan de forma similar a los números de fila en SQL. Dado que las ID se usan principalmente para las relaciones en SQL y éstas se modelan fácilmente en Neo4j, no parece haber mucho uso para las ID, pero ¿cómo se resuelve la recuperación de nodos específicos? Tener una API REST que se supone que tiene rutas únicas para cada nodo (por ejemplo, /api/concept/23 ) parece ser un caso bastante estándar para las aplicaciones web. Pero a pesar de ser tan fundamental, la única forma viable que encontré fue a través de

  • marcos específicos del lenguaje
  • como un nodo desconectado que mantiene los incrementos:

// 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

Fuente: http://www.neo4j.org/graphgist?8012859

¿Realmente no hay una manera más simple y si no, hay una razón particular para ello? ¿Mi enfoque es un antipatrón en el contexto de Neo4j?