Wir haben Elemente in unserer App, die eine baumartige Struktur bilden. Sie könnten ein Muster wie die folgenden haben:Aktivitätsfeeds mit Rollups
(c:card)-[:child]->(subcard:card)-[:child]->(subsubcard:card) ... etc
Jedes Mal, wenn eine Operation auf einer Karte (auf jeder Ebene) durchgeführt wird, würden wir es aufnehmen möchten. Hier sind einige mögliche Ereignisse:
- Der Titel einer Karte wurde von Bob aktualisiert
- wurde ein Kommentar hinzugefügt von Kate Erwähnens Joe
- Der Status einer Karte geändert von anhängigen genehmigt
Der Ansatz der verketteten Liste scheint populär zu sein, aber angesichts der Art von Anfragen, die wir gerne ausführen würden, bin ich mir nicht sicher, ob das für uns am besten funktioniert.
Hier sind die wichtigsten Abfragen wir laufen werden:
durch die Zeit des Ereignisses mit einer bestimmten Karte und Kind Karten, sortiert assoziiert- die gesamte Aktivität (im Grunde wie wir würden alle diese fusionieren Aktivität Feeds zusammen)
- alle Aktivitäten mit einer bestimmten Person sortiert nach Zeit assoziiert
hinzu kommt, dass wir möchten, dass Filter hinzufügen wie folgt aus:
- Filtern Person beteiligt
- Filtern Zeitraum
Es ist auch wichtig zu beachten, dass die Karten neu arrangiert sehr häufig werden kann. Mit anderen Worten, die Eltern können sich ändern.
Irgendwelche Ideen, wie man so etwas am besten modelliert? Vielen Dank!
Dank Brian :) Ist durch Bereich Indizes Neo4j ermöglichen sortieren.? Wenn ich beispielsweise Zeitstempel für Ereignisknoten hätte, wäre ich in der Lage, Ereignisse, die innerhalb eines bestimmten Zeitbereichs liegen und 2. dem Kind angehören, effizient abzufragen? –
Neo4j kann auf jeden Fall Indizes verwenden, um schnellere Abfragen nach Bereichen durchzuführen (beginnend mit 2.3). Der Trick besteht darin, sicherzustellen, dass es herausfinden kann, welcher der begrenzendste Startort ist. Wenn Sie denken, dass die Filterung nach Ereignisdaten Ihnen den kleineren Startpunkt geben wird, können Sie stattdessen mit "MATCH" auf Ereignissen beginnen. –