2014-06-06 4 views
7

Ich brauche Hilfe mit dem Modell meiner Neo4j Graph Struktur für eine zeitabhängige Domäne. Siehe die folgende Skizze für die Anforderung und Problem:Neo4j zeitabhängiges Graph Modell

Problem sktech

  • Bild 1 & 2: Für jeden Tag Ich habe Knoten und Beziehungen zwischen ihnen. Ich definiere die Beziehung als gemeinsames Auftreten zwischen zwei Knoten (z.B. Wörtern) in einigen lexikalischen Einheiten (Sätzen). Derselbe Knoten kann an mehreren Tagen mit neuen Knoten auftreten oder bereits einmal vorhanden sein. Das folgende Beispiel zeigt, wo wir nur benannten Entitäten für Knoten betrachten:

    • 2013/01/01: Peter wurde heute Abend über Cassandra fragen.
    • 01.01.2013: Cassandra möchte zu Hause bei Peter bleiben.
    • ....
    • 2013/01/08: Peter war in Judith verliebt.
    • 2013/01/08: Cassandra fährt Peter jeden Tag zur Schule.

    Dies führt zu der folgenden Grafikstruktur.

    - 2013/01/01: 
    
        (Peter) <--2--> (Cassandra) 
    
    - 2013/01/08 
    
        (Peter) <--1--> (Judith) 
    
        (Peter) <--1--> (Cassandra) 
    
  • Bild 3: Die Graphstruktur sollte zu einem Endpunkt (P2) unterstützt eine bestimmte Zeitspanne auswählen und einen Pfad von einem Startpunkt (P1) erhalten. Hier ist der Pfad durch den maximalen Fluss zwischen diesen zwei Knoten in Bezug auf die akkumulierten Knoten und Relationen für die spezifische Zeitspanne gegeben.

  • Abbildung 4: Es sollte auch möglich sein, Knoten z. B. entsprechend dem höchsten verbleibenden Kantengewicht zu erweitern. Bild 4 zeigt den erweiterten Graphen mit 3 zusätzlichen Knoten.

Ich weiß, diese Arbeit bereits 2 und das Multi-Level-Index 3 Beispiel. Das erste Modell unterstützt keine gute Pfadsuche zwischen Knoten aus verschiedenen Frames. Nur letzteres wird hilfreich sein, um Zeiträume abzufragen. Hoffe, dass jemand helfen kann.

Grüße.

+0

Etwas wie FluxGraph für Neo4j wäre nett. Siehe: http://www.slideshare.net/datatndn/fluxgraph-a-timemachine-for-your-graphs. Wenn jemand eine gute Idee zum Speichern solcher Snapshots hat, lass es mich wissen. Wie wäre es, jeden Knoten mit einem Zeitstempel zu versehen? Ist das gut skalierbar? Vielleicht kann ich ein solches Plugin für neo4j erstellen. Grüße. – user2715478

Antwort

4

Es gibt zahlreiche Möglichkeiten, die Zeit in einem Diagramm zu modellieren. Eine Möglichkeit besteht darin, einen Zeitstempel oder sogar die Start-/Endzeit des Zeitraums hinzuzufügen, in dem die Beziehung gültig war. Auf diese Weise können Sie das Diagramm abfragen, um Teilgraphen oder Pfade zurückzugeben, die zu einem bestimmten Zeitpunkt gültig waren.

Ian Robinson (einer der Autoren des Graph-Datenbanken Buchs) eine sehr gute Blog-Post zu diesem Thema geschrieben hat: http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/

In Bezug auf Leistung, ist es wahr, dass Beziehungen Zugriff auf nur ein wenig teurer ist als die Abfrage Nach Beziehungstyp, aber Sie müssen wahrscheinlich für sich selbst, mit Ihrem eigenen Datensatz, Benchmark, so würde ich vorschlagen, mit dem einfachsten Modell, das für Sie arbeitet, zu beginnen, und dann Leistung iterativ optimieren, falls erforderlich.

+0

Danke.Der Blogpost sieht gut aus. Aber wo sollte ich Eigenschaften von Beziehungen hinzufügen, die sich im Laufe der Zeit ändern? Der einfachste Ansatz, den ich mir vorstellen könnte, wäre, für jede Änderung eine neue Beziehung zwischen Identitätsknoten hinzuzufügen (einschließlich der Zeitspanne von/nach und dem neuen Wert). – user2715478

+0

Ja. Wenn sich eine Eigenschaft einer Relation (Beziehung: Klasse, Beziehung: Instanz einer möglichen Relation) ändert, müssen Sie eine neue Beziehung mit dem geänderten Eigenschaftswert und einem anderen Zeitstempel/Gültigkeitszeitraum erstellen. –

+0

Danke! Ich werde diesen Ansatz mit meinem Datensatz testen. Soweit ich aus der Gremlin-Dokumentation weiß, sollte es möglich sein, das Kantengewicht für eine bestimmte Zeitspanne zu summieren und den maximalen Fließweg zu durchlaufen. So etwas habe ich für cypher nicht gesehen. Habe nur die Dokumentation des Java Traversal Framework api gefunden. – user2715478