2015-11-02 10 views
6

Ich bekomme ein Timeout beim Abfragen für Tiefe 2 mit session.load(). Ich arbeite mit Neo4j OGM 1.1.3 (Versuch, von Spring Data Neo4j 3.4 zu migrieren) . Ein Knoten ObjektLoad ein Objekt in Neo4j OGM 1.1.3 Ogm Tiefe von 2 sehr langsam

class Node { 
    Long id; 
    String name; 

    @Relationship(type="NodeToCategory") 
    Category category; 

    @Realtionship(type="NodeToChildNode") 
    Node node 
} 

class Category { 
    Long id; 
    String name; 
    String color; 
    Date createdAt; 
} 

Die Kategorie zu laden versuchen, die zu meinem Knoten verbunden ist, ist sehr beliebt (20.000 Knoten die gleiche Kategorie haben) und wenn ich aus session.load(Node.class, 1L, 2) die Anforderungs mal laufen verwenden. Kann es sein, dass es versucht, alle Beziehungen der Kategorie abzufragen (obwohl meine Modellkategorie in Java diese Beziehung ignoriert)?

, was ich erwarten würde, ist es zu laden einfach.

|My Node 
| |category 
| |child node 
| | | category 
| | | child node 

, die keine sehr schwere Anforderung ist und sollte nicht Timeout (es sei denn, es unnötige Beziehungen wird geladen

Gibt es eine Möglichkeit zu sagen, Lädt man nur bestimmte Beziehungen zu tief?

Zum Beispiel möchte ich 10 Ebenen eines Baumes laden, aber andere Informationen auf meinem Baum (wie Kategorie, Rolle, die nicht wirklich Baumknoten sind, sondern einfach mehr Informationen darstellen) würde ich will nur t o lade sie ohne ihre Beziehungen. Also würde ich gerne alle Node-Objekte laden und nur andere Objekte auf dem Weg laden ohne deren Beziehungen.

UPDATE

fanden zwei offene Fragen, die diese Probleme zu lösen scheinen:

https://github.com/neo4j/neo4j-ogm/issues/55

https://github.com/neo4j/neo4j-ogm/issues/70

Antwort

0

Dieses Problem wird in OGM 3.0 mit Schema basiert Laden angesprochen wurde.

Schema-basiertes Laden bedeutet, dass OGM nun Ihr Objektdomänenmodell betrachtet und nur das abruft, was wirklich in Ihrem Modell vorhanden ist, anstatt alles bis zur angegebenen Tiefe.

In Ihrem Fall, wie die Category nicht zurück zu Node verknüpfen, wird die neue Version nicht diese vielen nicht benötigten Knoten laden, was zu einer enormen Leistungsverbesserung.