py2neo pythonを使用してcypherコマンドを実行することで、(埋め込まれていない)neo4jデータベースに多数のノード(〜500,000)モジュール(py2neo.cypher.execute)。最終的に私はpy2neoへの依存を取り除く必要がありますが、私はcypherとneo4jについてもっと学ぶまでそれを使っています。cypherを使用してneo4jデータベースにノードを挿入する最も効率的な方法
私は2つのノードタイプAとBを持ち、大半のノードはタイプAです。A- [r1] -AとA- [r2] -Bという2つの可能な関係r1とr2があります。タイプAの各ノードは0〜100のr1関係を持ち、タイプBの各ノードは1〜5000のr2関係を持ちます。
現時点では、大きなCREATE文を作成してノードを挿入しています。たとえば、私は...グラフの線形鎖を形成する別の5000かそこらのノードとの関係であるかもしれない声明
CREATE (:A {uid:1, attr:5})-[:r1]-(:A {uid:2, attr:5})-[:r1]-...
を持っているかもしれません。これは問題なく動作しますが、かなり遅いです。私も、私は、すべてのタイプAのノードを追加した後
CREATE INDEX ON :A(uid)
を使用して、これらのノードのインデックスを作成しています、私は再びCREATE文使ってタイプBのノードを追加します。最後に、
MATCH c:B, m:A where c.uid=1 AND (m.uid=2 OR m.uid=5 OR ...)
CREATE (m)-[:r2]->(c)
などのステートメントを使用してr2リレーションシップを追加しようとしています。ここで...数千のORステートメントを表すことができます。これは実際には毎秒わずか数の関係を追加するのが遅いようです。
だから、もっと良い方法がありますか?私は完全にオフトラックですか?私はthis questionを見ましたが、効率的にノードをロードするためにcypherの使い方を説明していません。私が見ているものは、javaを使用しているようですが、実際の暗号化クエリを使用することはできません。
私は2番目のWesコメント:パラメータ、より小さいステートメント、2.0を使用している場合は、cypherのトランザクションHTTPエンドポイントを使用することを検討してください。http://neo4j.org/develop/labels for cypher& //www.neo4j.org/develop/import and http://jexp.de/blog/2013/05/on-importing-data-in-neo4j-blog-series/ –
アドバイスをいただきありがとうございます。 PythonのCypher CREATE文でパラメータを使う方法を知っていますか?私がパラメータに関して見つけたことは、Javaのハッシュマップについて話すことです。 – savagent
py2neoでは、paramsという辞書パラメータです。 http://book.py2neo.org/en/latest/cypher.html HTTP経由で未処理のJSONを実行している場合は、クエリとともにJSONリクエストにparams:{uid:...}を追加できます。 –