Neo4j / Strategie zur Aufzeichnung von Knotenänderungen
Nehmen wir ein Diagramm an, das sich mit Autos befasst.
JederCar
kann sich im Laufe der Zeit weiterentwickeln, und ich muss diese Änderungen im Auge behalten.
(um einige Inkonsistenzen der Evolution usw. nachverfolgen zu können ...)
Ich dachte über die Implementierung einescopy-on-write Mechanismus (wieLinkedIn scheint zu tun), was bedeutet, eine völlig neue zu schaffenCar
Knoten jedes Mal, wenn einer derCar
Die Eigenschaften von ändern sich.
Am Ende hätte ich ein Diagramm wie das folgende:
(Ferrari)-[:CURRENT]->(V3)-[:PREVIOUS]->(V2)-[:PREVIOUS]->(V1)
Ich bin speziell daran interessiert, die aktuellste Version abzurufen, es würde also gut klingen.
Wie aber mit der Initiale umzugehen istCar
UUID?
MeineCar
Die UUID von (eine indizierte Eigenschaft zur Vereinfachung von Abfragen) wird automatisch über eine Bibliothek (Apache) generiert.
Ich stelle mir das vor, wenn ich für jede die gleiche initiale UUID behalteCar
Version kann dies zu einem Konflikt führen: "Holen Sie sich dieFerrari
deren UUID ist 123"=> Rückgabe von mehr als einem Ergebnis. 3 Ergebnisse bei 3 Versionen.
Ist es sicher und effizient, für jede Version eine neue Marken-UUID zu generieren?
Daher ist mir bewusst, dass in diesem Fall die einzige Möglichkeit zum Abrufen einer bestimmten Version darin besteht, den betreffenden Teil des Diagramms bis zur richtigen zu durchlaufen und nicht mit einer einfachen Abfrage der anfänglichen UUID zu rechnen. das scheint immer noch sehr effizient und einfach mit einer einfachen Cypher-Abfrage.
Ich möchte eine generierte UUID beibehalten, da eine mögliche "erratbare" REST-URL (unter Verwendung der UUID der Ressource) nicht ratsam ist.
In der Tat könnte ich eine UUID haben, die die Kombination zwischen derCar
Modell und seine Version, aber es scheint nicht genug "sicher" mit einer Sichtbarkeit auf meinen URLs. Jede böswillige Person könnte es leicht schaffen, eine ältere Version abzurufen, indem sie nur die URL ändert.