2015-04-03 7 views
10

Soweit ich es verstehe die IDs von Neo4j (ID(node)) sind instabil und verhalten sich etwas wie Zeilennummern in SQL. Da IDs meist für Relationen in SQL verwendet werden und diese in Neo4j leicht modelliert werden, scheint IDS wenig nützlich zu sein, aber wie lösen Sie dann den Abruf bestimmter Knoten? Eine REST-API zu haben, die für jeden Knoten eindeutige Routen haben sollte (z. B. /api/concept/23), scheint ein ziemlich Standardfall für Web-Anwendungen zu sein. Aber obwohl es so grundlegend, der einzig gangbare Weg zu sein, ich wäre entweder überAuto-Inkrement-Eigenschaft in Neo4j

  • Sprache
  • als unverbundenen Knoten spezifische Rahmenbedingungen gefunden, die die einzelnen Schritte unterhalten:
// 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 

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

Gibt es wirklich keinen einfacheren Weg und wenn nicht, ich Gibt es einen besonderen Grund dafür? Ist mein Ansatz ein Anti-Pattern im Kontext von Neo4j?

Antwort

7

Neo4j interne IDs sind ein bisschen stabiler als SQL-Zeile IDs, wie sie nie während einer Transaktion für z.

Und tatsächlich ist es nicht empfehlenswert, sie für den externen Gebrauch auszusetzen. Ich weiß, dass Neo-Interna einige Absichten haben, ein solches Feature zu implementieren.

Grundsätzlich neigen die Menschen dazu zwei Lösungen für diesen Einsatz:

  1. einen UUID-Generator auf der Anwendungsebene verwenden wie für PHP: https://packagist.org/packages/rhumsaa/uuid und ein Label/UUID eindeutige Einschränkung auf allen Knoten hinzuzufügen.

  2. eine sehr Handvoll Mit Neo4j wie https://github.com/graphaware/neo4j-uuid Plugin, das UUID Eigenschaften on the fly hinzufügen wird, so dass es Ihnen die Last abnehmen auf der Anwendungsebene zu handhaben und es ist einfacher, die Persistenz Zustand Ihrer Knoten zu verwalten Objekte

+2

Dies beantwortet die Frage nicht. Autoinkrement-IDs können verwendet werden, um Objekte in der Reihenfolge der Erstellung zu sortieren, was mit UUIDs –

+2

nicht möglich ist. Welchen Teil der Frage beantwortet Ihr Kommentar? –

+0

Ich glaube, das Hinzufügen eines Unix-Zeitstempels oder irgendeines Datums-Zeit-Präfixes zu der zufälligen eindeutigen Zeichenkette würde das Sortierproblem beheben. – Guy