2017-03-09 7 views
0

私は毎回ランダムにグラフからノードにしようとしています。データベースのノード数は24600968です。次のクエリNeo4j:巨大なデータを使ったゆっくりとした選択操作

MATCH (n:Employee) 
WITH n AS emp,rand() AS ids ORDER BY ids LIMIT 10 

MATCH (n:Company) 
WITH emp, n AS com,rand() AS ids ORDER BY ids LIMIT 10 
RETURN emp.guid,com.guid 

は非常に長い時間がかかります。時間は

Returned 10 rows in 306863 ms. 

どのように私はこのプロセスをスピードアップできますか?

+0

あなたのクエリの目標は何ですか? 10人の従業員を無作為に選んでデータベースをサンプリングしますか? –

+0

私はグラフデータシミュレータを開発しています。どこでノードをランダムに選んで関係を作成しなければならないのですか。 –

+1

私は参照してください。私は "適切な"サンプリングをするのは良い考えがありませんが、http://jexp.de/blog/2014/03/sampling-a-neo4j-database/に基づいて、あなたは次のようなものを試すことができます: 'MATCH(n )where rand()<0.1 RETURN n LIMIT 10'。残念なことに、これは斜めのサンプルを与える - 最初のノードは、サンプルにそれを作る可能性が非常に高い。 –

答えて

2
  1. 走行2つの別々のステートメント

  2. は、IDのランダムセットすることで、この

ルックアップノードを試してみて、彼らはあなたのクエリが発生し、従業員

MATCH (n) WITH count(*) as total 
WITH [_ IN range(1,10000) | toInt(rand()*total)] as ids 
MATCH (emp) WHERE id(emp) IN ids AND emp:Employee 
RETURN emp LIMIT 10 

あるかどうかを確認24Mのランダムな値のリストとそれを(2回)ソートしながら、そのグラフから多くのノードを引き出しますあなたはどのくらいのメモリがあるかわからない

+0

ロジックはかなり良く見えます。私はusecaseでテストします。 –

+0

この範囲では、なぜ上限は10000ですか?全体の代わりに。 –

関連する問題