2017-01-20 10 views
1

私はのNeo4jインポートツールを使用してのNeo4jに(これまで10メートルノードを超える)大きなデータセットをインポートしています。私のデータをインポートした後、いくつかのクエリを実行します。これらのクエリの1つは非常に悪い結果を出します。私はそれを最適化しました(PROFILING、関係タイプを使用して、マルチコアのために分割するのサポートなど)。のNeo4jの一括インポートおよびインデックス

それでもそれは時間がかかりすぎるので、私の考えは、INDEX USING句を使用することにより、ノードの特定のタイプに開始するのNeo4jを伝えることでした。私はその後、dbヒットの変化をチェックし、おそらくそれを動作させることができました。今私のデータベースはインデックスを持っていません。

私が必要とするすべてのクエリを書き終えたらインデックスを作成したいと思っていましたが、すでにインデックスを使用し始めているようです。

一括インポート処理中にこれらのインデックスを作成できるかどうかは、です。それは私にとっては良い解決策であるようです。どうすればいい?

また、(「タイプ」と呼ぶ)のすべての1つに存在する属性のインデックスを作成するステートメントを実際に書くことができるかどうかは疑問です。

CREATE INDEX ON :(type); 

は(ラベルが欠落しているが、私はそれを省略したい)

答えて

2

インデックスは、ラベル+プロパティにある動作しません。インポートの直後、およびクエリを最適化しようとする前にインデックスが必要です。クエリが開始点を見つけるために使用するものはすべて、インデックス化(user_id、object_idなど)し、範囲クエリ(modified_on、weightなど)に使用される任意の日付またはプロパティである必要があります。

CREATE INDEX ON :Label(property) 

Cypherクエリはシングルスレッドなので、マルチコアサポートの意味がわかりません。あなたはそれについて何を読んだのですか、リンクがありますか? Neo4jをマルチスレッド化することはできますが、この時点で手動で行う必要があります。 https://maxdemarzi.com/2017/01/06/multi-threading-a-traversal/

ほとんどの場合、クエリはインデックスを使用して大幅に最適化したり、異なる方法で表現したりすることができます。しかし、クエリに合わせてモデルをやり直す必要があることもあります。いくつかのヒントについてはhttps://maxdemarzi.com/2015/08/26/modeling-airline-flights-in-neo4j/を見てください。

+0

おそらく私のモデルを考え直すべきです。私のクエリの90%は、どのプロパティでも検索しないので、出発点を見つけることは、おそらく私のために効率的ではないでしょうか?また、私のノードには単一のラベルしかありません。他のラベルを使用する代わりに、そのラベルをノードのプロパティとしてインポートする方が良いでしょう。そうすれば、すべてのものを簡単に索引付けできます。私がマルチコアをサポートすることが意味していたことは、マイケル・ハンガーがここで見つけることができる輸入に関するビデオで言及していることです:[link](https://youtu.be/7beIWWFXcp0?t=16m28s) –

関連する問題