Versionen verwendet: Neo4j 3.0.6 mit Frühling-data-Neo4j 4.2.0.M1 für POJO MappingNeo4j Datenmodellierung: Privatbesitz Knoten, reiche Beziehungen, Schlösser
Ich versuche zu entscheiden, wie Daten zu modellieren mit neo4j und vergleichen Sie Vor- und Nachteile verschiedener Lösungen.
Anforderungen:
- Ein Film eine dynamische Liste von Metadaten hat (ein Metadaten verfügt über 3 Eigenschaften: 'Schlüssel', 'Wert', 'locale'). Die Anzahl der Metadaten für einen Film ist nicht im Voraus bekannt, ebenso wenig wie die möglichen Schlüssel. Sie müssen von den anderen technischen Eigenschaften des Films trennbar sein, da sie lokalisiert sind und als Geschäftsdaten gelten.
- Metadaten gehören dem Film und werden immer über den Film aufgerufen. Sie können nicht mit anderen Filmen
- schnell geteilt werden, um Abfragen holen möglich auf Metadaten sein müssen Werte
Film Metadaten Beispiel:
Movie metadata
locale 'en_GB':
title: 'Jurassic Park'
description: 'description in english'
locale 'fr_FR':
description: 'description en francais'
locale 'none':
actor: 'Jeff Goldblum'
- Ein Knoten pro Metadaten (mit 3 Eigenschaften pro Knoten: 'Schlüssel', 'Wert', 'Gebietsschema')
- Nachteil: Privatbesitz Konzept umgesetzt werden (löschen von Metadaten verwaisten Knoten manuell verwaltet werden, weil nicht durch die Feder-data-Neo4j unterstützt/Neo4j-OGM)
Lösung B
- Ein eindeutige Knoten pro locale (mit 1 Eigenschaft: 'locale') (Beispiel: 'de_AT')
- Metadaten als reiche Beziehungen (mit 2 Beziehung properti es: ‚Schlüssel‘, ‚Wert‘)
- Nachteil: die Beziehung zu erstellen, müssen eine Sperre auf Locale Knoten
Hat jemand hat Erfahrung über Lösung B eingenommen werden? Wie schlimm ist es, einen Knoten zu sperren, der von Millionen anderer Knoten gemeinsam genutzt wird? Was ist die Auswirkung auf Leistungen und Skalierbarkeit?
Hat jemand eine bessere Modellierungslösung?
Es würde helfen, ein bisschen mehr über die Metadaten zu wissen. Hat jeder Benutzer eigene Metadaten zu einem Film oder ist er nicht benutzerspezifisch? Gibt es einen Grund, warum Sie die Metadaten nicht als Eigenschaften auf den Filmknoten speichern können? Sind einige Teile von Metadaten dazu gedacht, sich wie Tags zu verhalten (was bedeutet, dass Sie von Metadaten zu Filmen abfragen können)? Oder greifen Sie jemals nur auf Metadaten eines Films und nicht direkt zu? – InverseFalcon
Nein, Metadaten sind nicht benutzerspezifisch. Aber sie sind lokalisiert (ich habe das zur Vereinfachung nicht erwähnt). Ich denke, die einzige Möglichkeit, Metadaten auf Filmknoten zu speichern, ist innerhalb von Arrays, oder? Aber dies wäre nicht effizient für Abfragen Abfragen. Wir müssen Filme basierend auf ihren Metadaten filtern können. Und ja, wir greifen immer auf Metadaten von einem Film zu. – tigrou83
Ich bin nicht genau sicher, was Sie meinen, indem Sie nur Metadaten in Arrays speichern können. Gibt es einen Grund, warum Sie nicht einfach Eigenschaften für Ihre Filmknoten festlegen können? Sie können immer nach Knoteneigenschaften innerhalb Ihrer WHERE-Klauseln filtern. Ich bin immer noch neugierig, welche Art von Metadaten das sein soll ... was unterscheidet es von den Knoteneigenschaften, die Sie verwenden wollten? Können Sie einige Beispiele für diese Metadaten angeben? – InverseFalcon