2016-05-31 21 views
1

我不明白在ArangoDB創建圖的必要性。關於理解在ArangoDB圖創建的必要性

例如,請參閱下面的AQL值,

// 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 

以上兩種查詢明確相關圖表...但你沒有必要創建一個圖表,以使他們的工作。

爲什麼和什麼時候應該創建圖表?

如果我創建圖形,我會得到什麼好處?

回答

0

Creating or registering a 'graph'在ArangoDB是可選的。其目的是在修改過程中保持圖形的持久性。

您可以在不引用圖形的情況下使用文檔特徵以及圖集遍歷的組合。

但是,上面的圖定義的一個主要目的是在修改邊或頂點時使用它。頂點集合中的頂點文檔可以從多個邊集合中的幾個邊文檔引用,這些邊集合在術語中屬於多個圖。

當你現在remove a vertex via a graph API,所有這些圖形定義被查詢是否允許邊指向這個非常特殊的頂點集合。接下來搜索並刪除所有可能邊集合中的所有邊。所有這些都是通過事務安全來完成的。

通過這樣做,可以保持所提到的圖形持久性。圖形持久性意味着您沒有指向先前移除的頂點的懸掛邊。

請注意,您應該使用pattern matching traversals;人們可以用更現代的模式匹配改寫

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

這樣的:

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

謝謝@dothebart ..現在我理解阿朗戈圖形的意義。 我過去經歷了模式匹配遍歷,以滿足我的一個要求,但指定min和max並不總是幫助我。 例如,我需要獲取給定頂點的所有連接頂點(在任意深度)。爲此,我不想指定最大深度(事實上我不知道它)並限制跳躍深度(maxdepth)。相反,我想遍歷整個圖並列出所有連接頂點到給定的頂點。我怎樣才能實現使用模式匹配遍歷? – mahi

+0

您目前只能通過指定非常大的最大值來實現此目的。請注意,這種遍歷可能會使用許多資源;因爲這個原因,它不允許遍歷到隨機深度。 – dothebart