2016-05-31 8 views
1

ArangoDBでグラフを作成する必要性については理解していません。例えばArangoDBでのグラフ作成の必要性の理解について

、以下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 

上記の2つのクエリが明確にグラフに関連しているを参照してください...しかし、あなたはそれらを動作させるために、グラフを作成する必要はありません。

なぜ、私はグラフを作成する必要がありますか?

グラフを作成するとどのような利点がありますか?

答えて

0

Creating or registering a 'graph'はArangoDBです。その目的は、変更中にグラフの永続性を維持することです。

グラフを参照せずに、コレクション上でドキュメント機能とグラフトラバーサルの組み合わせを使用できます。

ただし、上記のグラフ定義の主な目的の1つは、エッジまたは頂点の変更中にこのグラフを使用することです。頂点コレクション内の頂点文書は、いくつかのエッジコレクション内のいくつかのエッジ文書から参照することができ、これらのエッジコレクションは、いくつかのグラフに属する。

今度はremove a vertex via a graph APIになったとき、この特別な頂点コレクションを指すエッジが許可されているかどうかに関わらず、これらのグラフ定義はすべてクエリされます。次に、すべてのエッジコレクション内のすべてのエッジが検索され、削除されます。すべてこれはトランザクションのセキュリティで行われます。

このようにすることで、前述のグラフの持続性を維持することができます。グラフの永続性とは、以前に削除された頂点を指しているぶら下がりエッジがないことを意味します。

Plesaeは、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ありがとう。 私は過去のパターンマッチングトラバーサルを自分の要件の1つとして行ってきましたが、最小値と最大値を指定することは常に私を助けてくれません。 たとえば、与えられた頂点のすべての接続された頂点(任意の深度)を取得する必要があります。このため、私は最大深度(実際にはわかりません)を指定し、その深さ(最大深度)にホップを制限したくありません。代わりに、グラフ全体をトラバースして、頂点を指定された頂点に移動します。どのようにパターンマッチングトラバーサルを使ってそれを達成できますか? – mahi

+0

現在のところ、これを実現するには非常に大きなmaxを指定する必要があります。この種のトラバーサルは、多くのリソースを使用する可能性があることに注意してください。その理由から、それはランダムな深さにトラバースすることはできません。 – dothebart

関連する問題