Im Moment bin ich mit Neo4j und löste die Aufgabe von der falschen Seite. Zuerst bekomme ich allShortestPaths
und dann nach den richtigen in ihnen mit Java suchen. Natürlich kann dieser Weg keine Ergebnisse garantieren, selbst wenn sie existieren. Also, ich suche nach irgendeinem Graph DBMS, das nativ suchen kann, was ich brauche.Shortestpath mit komplexen Kriterien ist es möglich, in jedem Diagramm DBMS
Datenmodell ist einfach:
Knoten: keine Eigenschaften mit Ausnahme Nummer zur Identifizierung
Relations: 1 Objekt mit Doppel Wert
Um es klar zu machen - es ist eine Liste der Organisationen und Anteile, die sie besitzen (dh Eigenschaft = Prozentsatz> 0 < = 100) .
Kriterien, wenn durch den Weg gehen ist:
- Wenn nächste Beziehung 50 ++ der Knoten enthalten ist (Pfad weiter)
- Wenn nächste Beziehung weniger ist, dann 50, aber alle bereits Knoten in Pfad eigen 50+ dieses Knotens, dann noch weiter der Weg
das bedeutet, soll dieser Algorithmus nicht nur die Beziehungen des Weges selbst, sondern „Seite“ Beziehungen (vorzugsweise nicht immer berechnen, sondern nur, wenn „nächste Beziehung "ist 50-).
Und last, but not least: Es wird erwartet, dass die Leistung der einheimischen shortestpath haben (dh mehrere Millisekunden auf 18mln Knoten + 40mln Beziehungen) oder in der Nähe. Keine Stunden oder gar Minuten. Momentan findet der kürzeste Weg Pfade mit 30-40-50 Hops in Millisekunden, das ist erstaunlich. Wenn ich mit dem Relation-Wert spiele, kann ich in wenigen Sekunden kürzeste Wege von mehreren Längen bekommen. Aber das ist keine ideale Lösung.
Ich bin nicht Neo4j Experte (noch :), von dem, was ich bisher entdeckt habe - Leistung von allsSortestPaths
ist ziemlich dickes Ding. Das Hinzufügen zusätzlicher Kriterien kann die Leistung von Millisekunden auf Stunden reduzieren. Das ist nicht akzeptabel :(Weglänge von 10 ++ ist auch ein Muss.
Ich denke, dass ich zu viel will, aber nach wie vor, irgendwelche Hinweise, Ideen, Lösungen sind willkommen!