2013-08-06 39 views
5

Neo4j上のすべてのノードの次数を取得して、どのノードが非常に巨大なグラフ(200万ノードと5百万の関係)?巨大グラフ(百万ノードとリンク)を持つNeo4jのノード次数クエリ

私はのように、それを達成するためにサイファーやグレムリンを使用することができます知っている:

start n = node(*) 
match (n)--(c) 
return n, count(*) as connections 
order by connections dsec 

または

g.V.bothE 

が、私のコンピュータが持っているRAMは、私はいつものを待つのみ2G〜4Gです長い時間と私は上記のクエリを発行するときに "未定義"を得る。

gremlinまたはcypherとneo4jのようなクエリのような巨大なグラフの経験を誰も持っていますか?

答えて

2

最大限の結果を得るには、結果を制限する必要があります。したがって、cypherは上位10の結果を保持するだけです。

あなたができる
START n = node(*) 
MATCH (n)--(c) 
RETURN n, count(*) as connections 
ORDER BY connections DESC 
LIMIT 10 

または:

START n = node(*) 
RETURN n, length((n)--(c)) as connections 
ORDER BY connections DESC 
LIMIT 10 

そうでなければ、私はステファンに同意します。

+0

マイケルに感謝、私は完全に "リミット"を忘れています。とにかく、2つありがとうございました。 – Arvin

+0

ところで、リンクのないノードがあるかどうかを知りたいのですが、昇順で注文するとどうなりますか?それは '0'を表示するか、それともスキップしますか? – Arvin

+0

2番目のコマンドでは、 '(c)'の近くに2行目に構文エラーがあります。これを '()'に置き換えると動作します。名前は必要ありません – saeedgnu

1

実際、これは非常に高価でグローバルな操作です。この場合、GlobalGraphOperations.getAllRelationshipsを使用するunmanaged extensionを使用する方がよい場合があります。すべてのリレーションシップを反復処理する間、Mapを構築し、各リレーションの開始ノードと終了ノードのカウンタをインクリメントします。最後のステップはあなたのマップ内で最大値を見つけることです。

関連する問題