1

タイトルがうまく表現されているかどうかはわかりませんが、他の方法はわかりません。Neo4j データベースにデータを入力しています。

データは主に、ユーザーのペアについて私が持っているデータから生成されます。ユーザー間には、次のようなパーセンテージの関係があります。

   80
A ---> B

しかし、逆の関係は同じではありません。

   60
A <--- B

両方の関係を入れることもできますが、私ができることは、平均を使用することだと思います。

   70
A <--> B

しかし、私はここで提案を受け入れます。

私が Neo4j でやりたいことは、関連するユーザーのグループを取得することです。たとえば、平均 % 関係が 50 を超えるユーザーのグループを取得したいとします。

      A
40  /   \  60
   B --- C ------ D
     20      70

次のようなサブセットが返されます。

      A
        \  60
         C ------ D
             70

どうすればいいのかわかりません。もう1つのことは、他のノードからどのノードにも到達できないと確信していることです。バラバラだと思います。同様に、いくつかの大きなグラフ。しかし、一部のノードのグループが他のノードから完全に分離されている場合でも、上記に該当するすべてのものを取得できるようにしたいと考えています。

数値の目安としては、約 100,000 のノードと 550,000 のエッジがあります。

4

2 に答える 2

2

いくつかの考え。

まず、グラフが接続されていなくても問題ありませんが、分析するすべてのコンポーネントにアクセスする方法が必要です。Neo4j の切断されたグラフでは、Lucene のインデックス作成、ノードまたは関係 ID を保持する外部の「インデックス」、または DB 内のすべてのノードまたは関係の反復処理のいずれかを意味します (これは遅いですが、問題で必要になる場合があります)。

第二に、私はあなたのドメインを知りませんが、元の表現と重みに固執することは問題ないかもしれないことを理解してください. Neo には無向エッジがなく (ただし、エッジの方向は無視できます)、後でそのデータが必要になる場合があります。OTOH、重みの平均を取る変更により、分析が簡素化されます。

第三に、グラフのサイズと特性によっては、これは非常に遅くなる可能性があります。重みが 50 を超えるエッジから構築されたサブグラフ内のすべての接続コンポーネントが必要なようです。私の知る限り、これにはデータベースに対する O(N) 操作が必要です。ここで、N は DB 内のエッジの数です。DB 内のすべてのエッジを反復処理し、それらの重みに基づいてフィルター処理し、そこからクラスター化することができます。

Gremlin/Groovy を使用すると、これを非常に簡単に行うことができます。Gremlin のドキュメントを参照してください。

もう 1 つのアプローチは、データを挿入する際のある種の反復クラスタリングです。O(N) の必要性を回避することはできませんが、これは実際のパフォーマンスを大幅に向上させる可能性があると思います。

于 2012-06-15T17:27:35.370 に答える
1

http://tinyurl.com/c8tbth4のようなものがここに適用されるのでしょうか?

start a=node(*) match p=a-[r]-()-[t]-() where r.percent>50 AND t.percent>50 return p, r.percent, t.percent
于 2012-06-16T14:18:45.190 に答える