2017-09-14 5 views
1

私はneo4jが新しく、現在、既存のデータをneo4jデータベースに移行しようとしています。私は、現在のデータを別のフォーマットで大規模なCREATE Cypherクエリに変換してデータベースの初期投入を行うための小さなプログラムを作成しました。私の最初の反復は、既存のオブジェクトモデルの構造、つまりオブジェクトがノードになり、ノードタイプが現在のオブジェクトモデルのオブジェクト名と同じであり、メンバがプロパティになります(メンバ名はプロパティ名です)。これはすべての基本型(および文字列)に対して行われ、元のオブジェクトモデルと同じように分解されます。Neo4j Webクライアントは、大きなCypher CREATEクエリで失敗します。 144000 lines

これはパフォーマンス面で優れており、Webフロントエンド/クライアントから実行できる13000件以上のCREATE Cypherクエリが生成されています。しかし、モデルは多くのプロパティが存在する可能性があるので、グラフデータベースには理想的ではありません。代わりに、基本的なメンバーであるこれらの「基本的な」ノードを、独自のノードにデモを組んで、より高いレベルのオブジェクト/クラスを表す '抽象的な'ノード。これは、各メンバが単一の(最初は拡張可能な)プロパティsay {value: "42"}を持つノードであることを意味します。または、ノードタイプをデータ型(つまり整数)に設定できます。私の理解が正しければ、これは、単に、親オブジェクト同士を関連付けるのではなく、異なるオブジェクトのオリジナルメンバー間の関係を表現する際に、より自由度の高い 'メンバー'(ノードであり、プロットではないため) 。

問題は、neo4jクライアントが一括しているように見える144000+ラインのCypherクエリを生成することです(これは他のものと比較して大きなデータセットではありません)。コードの強調表示は、クライアントのクエリ入力ボックスで機能するように見えます(正しくハイライト表示されます。これは正しく解析され、有効なcypherクエリです)。しかし、クエリを実行すると、通常のブラウザは表示されませんスタックオーバーフロー(意図していない)エラーを返します。さらに、neo4jクライアントはエレガントに終了せず、常に終了タスクを強制する必要があり、dbは2.5〜3GBの使用量になります。データの有効量と少量(144000行、およそ2/3はほとんどの〜48000ノード)。しかし、ミリ秒単位で数百万のノードと関係に対処できるはずですが、私は読んでいますか?

firefoxとchromeで試しました。私はwindows10でneo4jコミュニティ版を使用しています。 sdkは、最初はC#とC++で使用されます。この研究は初期段階にあるので、私はまだsdkを使用していません。

これは有効なアプローチですか、つまり、最初にCREATEクエリを使用してデータベースに移入するのですか? データを基本型に分解することについての私のアプローチも良いですか?またはこのアプローチから生じる可能性のある問題が存在するかどうかを判断する。

ありがとうございました。

答えて

2

これは非常に大きなサイファークエリです!

LOAD CSV FROM...を使用してデータベースを作成し、ロードするデータを含むCSVファイルを提供するほうがずっと良いでしょう。詳細、について説明するため

、見て:あなたはサイファークエリのコードを生成しているので

https://neo4j.com/developer/guide-import-csv/

(このページは、実際に大規模なデータセットのためのバッチ・ローダーを説明します。)

私はあなたがCSVファイルを生成するにはあまりにも多くの問題を抱えているとは思わないでしょう。

(パフォーマンスの指標として、私はのNeo4jは2分の下に私のラップトップ上で実行されているに今日100万レコードのCSVをロードされています。)

+0

おかげで、私はこれを疑うために初めました。 – lfgtm

関連する問題