2

2 種類のノード (ユーザーと場所など) を持つネットワークがあり、関係が "入っている" と仮定します。これは二部ネットワークであり、そこから通常は networkx などのモジュールが 2 つの方向のいずれかでネットワークの「射影」を提供するため、場所のネットワークを生成できます (共通ユーザーの数を重みとするリンクを使用)。またはユーザーのネットワーク (重みとして共通の場所の数を持つリンクを使用)。

グラフ データベースでこのようなネットワークを作成するにはどうすればよいですか? OrientDB、Neo4j、FlockDB など、最も一般的なオープンソースのものの例を教えてください...

より具体的には、グレムリンでそれを行う方法は?

そのような場合(グレムリン)私自身が回答を貼り付けましたが、それは生き残ったノードから始まります。通常、最初のステップはいくつかの間隔のサブセレクションであるため、投影されるノードから開始する方が効率的です

g.V.filter{it.date=='3/3/2003'}.filter{it.type=='place'}....

そのため、特定の日、またはその他の間隔で同じ場所にいたことによって関連しているユーザーのネットワークにのみ関心があります。

4

2 に答える 2

1

この使用例に関する多くの例が含まれているため、 Marko Rodriguez のブログをお勧めします。Marko は Gremlin の作者でもあり、OrientDBと Neo4J はそれに準拠しています。

于 2012-05-22T13:12:49.157 に答える
0

プロジェクションノードから始めて、gremlinで方法を見つけました(それに加えて、OrientDB RESTインターフェイスで機能します)

g.V.filter{it.type=='user'}.as('a').out('checkedIn_at').in('checkedIn_at')
.as('b').simplePath.select(['a','b']).groupCount(){it.name}.cap()

それは答えなので、私は私に自己答えています:-D

状況によっては、グラフがサブセレクションである巨大なデータベースがあります。私はそれから何かから始まる答えを好むでしょう

g.V.filter{it.date=='3/3/2003'}.filter{it.type=='place'}....

ここでの私の推測は

...sideEffect{x=it}.in.as('a').transform{x}.in.as('b').select(['a','b'])
.groupCount(){it.name}.cap()

現存する問題は、これらのパターンが任意の投影機能を許可しないことです。解決策は、groupByの多様性を試して、ユーザーの各ペアに共通の頂点をリストすることだと思います。

g.V.filter{it.type=='place'}.sideEffect{x=it}.out.as('a').transform{x}.out
.as('b').select(['a','b']).groupBy{[it[0],it[1]]}{x}.cap

groupByは、後処理用の3番目のパラメーターを使用して、多くのMapReduceパターンを可能にします。

于 2012-05-23T17:16:24.160 に答える