2

ノードが持つ特定のタイプの発信関係の数を数えようとしています。私のコードは現在次のようになっています。

int count = 0;
for (Relationship r : node.getRelationships(RelationshipTypes.MODIFIES, Direction.OUTGOING))
{
   count++;
}
return count;

getRelationships の戻り値の型は Iterable であるため、size() などは使用できません。一部のノードには多数の関係 (> 500 万) があるため、データベースからすべての関係を引き出す必要がないようにしています。これを行うより速い方法はありますか?

4

4 に答える 4

3

いいえ。neo4j がノードのリレーションシップをディスクに保存する方法は、リンクされたリストにあり、ノードまたはリレーションシップの統計は一切保持しません。カウントを取得するには、そのタイプのノードのすべての関係を調べる必要があります。

より効率的に保存できるキャッシュがある場合でも、システムはまだ全体像を提供しない場合があります。あなたの方法が最良の方法です。

于 2013-03-21T19:07:42.527 に答える
0

あなたはneo4japiを使用しているようです。もう1つの方法は、 Groovyとscalaの両方で使用できるThinkerPopグレムリンクエリ言語を使用することですが、内部的には同じことを行います。私が知っているように、neo4jは、パフォーマンス上の理由から、イテレータを介したアクセスを提供しています。たとえば、数百万の関係を持つことができますが、その場で結果をページ分割したいとします。Neo4Jが常に関係のコレクションを返すとしたら、それは本当に遅いでしょう。そのため、彼はイテレータを返し、関係にその場でアクセスできるようにします。それらは、必要になるまでDBから取得されません。

だから私はNOと言うでしょう。私はあなたを助けることができると思います。

于 2013-03-21T18:51:53.493 に答える
0

発信をデータ構造に格納し、構造のサイズを取得しようとします。これは、オブジェクトが初期化されるときに時間がかかる場合がありますが、サイズをすばやく取得する最も簡単な方法のようです。

于 2013-03-21T18:00:26.737 に答える
0

ifnode.getRelationships(RelationshipTypes.MODIFIES, Direction.OUTGOING)が then の型を返す場合Collection、ノードが持つ特定の型の発信関係の数を知るには、次のように単純に使用できます。

int count = node.getRelationships(RelationshipTypes.MODIFIES, Direction.OUTGOING).size();
于 2013-03-21T18:17:07.053 に答える