2016-05-31 10 views
1

Ich verstehe nicht die Notwendigkeit der Erstellung von Graphen in ArangoDB.Zum Verständnis der Notwendigkeit der Graph Erstellung in ArangoDB

Zum Beispiel beziehen sich die unten AQLs,

// Paths between 2 vertices 

FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", { 
    paths: true, filterVertices: [{_id: "person/person2"}], 
    vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name 

//All connected Vertices for a given Vertex..** 

FOR p IN PATHS(person, knows, "outbound") 
    FILTER p.source._id == "person/person5" 
    RETURN p.vertices[*].name 

Die beiden oben genannten Abfragen sind Graphen eindeutig im Zusammenhang ... aber Sie keine Notwendigkeit, eine Grafik erstellen, um ihnen zu arbeiten.

Warum und wann sollte ich ein Diagramm erstellen?

Welche Vorteile habe ich, wenn ich ein Diagramm erstelle?

Antwort

0

Creating or registering a 'graph' in ArangoDB ist optional. Sein Zweck besteht darin, die Beständigkeit des Diagramms während der Änderungen beizubehalten.

Sie können Dokumentmerkmale und Kombinationen von Diagrammdurchläufen für die Sammlungen verwenden, ohne auf das Diagramm Bezug zu nehmen.

Ein Hauptzweck der obigen Diagrammdefinition besteht jedoch darin, sie beim Ändern von Kanten oder Scheitelpunkten zu verwenden. Ein Vertex-Dokument in einer Scheitelpunktsammlung kann aus mehreren Randdokumenten in mehreren Kantenauflistungen referenziert werden, wobei diese Kantenauflistungen in Term zu mehreren Graphen gehören.

Wenn Sie jetzt remove a vertex via a graph API, werden alle diese Diagrammdefinitionen abgefragt, ob sie Kanten erlauben, die in diese sehr spezielle Vertexsammlung zeigen. Anschließend werden alle Kanten in allen möglichen Kantensammlungen gesucht und entfernt. All dies geschieht mit Transaktionssicherheit.

Dadurch kann die erwähnte Graph Persistenz beibehalten werden. Diagrammpersistenz bedeutet, dass Sie keine Schlenkerkanten haben, die auf einen zuvor entfernten Scheitelpunkt zeigen.

Bitte beachten Sie, dass Sie lieber pattern matching traversals; Man könnte

FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", { 
    paths: true, filterVertices: [{_id: "person/person2"}], 
    vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name 

wie dies mit der moderneren Musterabgleich umformulieren:

FOR v, e, p IN 1..20 OUTBOUND "person/person3" 
    FILTER v._ID != "person/person2" 
    RETURN p.vertices[*].name 
+0

danke @dothebart .. Jetzt verstand ich die Bedeutung eines Graphen in arango. Ich habe in der Vergangenheit Musterpasswanderungen für eine meiner Anforderungen durchlaufen, aber die Angabe von Min und Max hilft mir nicht immer. Zum Beispiel muss ich alle verbundenen Scheitelpunkte (in jeder Tiefe) für einen gegebenen Scheitelpunkt erhalten. Dazu möchte ich nicht die maximale Tiefe angeben (eigentlich kenne ich sie nicht) und die Hops auf diese Tiefe beschränken (maxdepth). Stattdessen möchte ich den gesamten Graphen durchlaufen und alle verbundenen auflisten Vertices zu dem gegebenen Vertex. Wie erreiche ich das mit Pattern-Matching-Traversalen? – mahi

+0

Das erreichen Sie derzeit nur durch Angabe eines sehr großen max. Beachten Sie, dass eine solche Traversierung viele Ressourcen benötigt; Aus diesem Grund ist es nicht erlaubt, in zufällige Tiefe zu gehen. – dothebart