2016-10-03 7 views
1

私はのNeo4jグラフデータベースにCSVファイルをインポートする方法が知られているが、私は、彼らがすべてのこのような列の固定番号であることが判明:ソーシャルネットワーク関係csv(dictのリスト)ファイルをneo4jグラフデータベースにインポートするにはどうすればいいですか?

ID1、ID2、ID3、ID4、ID5

ID2 、ID2、ID3、ID4、ID5

ID3、ID2、ID3、ID4、ID5

しかし、私は人との関係を説明変数列CSVファイルを持っています。それは次のようになります。

ID1、ID2、ID3、ID4、ID5

ID2、ID2、ID3、ID4、ID5、ID6、ID7

ID3、ID2、ID3

これは、id1人がid2、id3、id4、id5に続き、id2人がid2、id3、id4、id5、id6、id7に従うことを意味します。

このファイルは巨大です(約6Gb)、どうすればneo4jにインポートできますか?

答えて

3

ここでは、Cypher LOAD CSV句を使用してインポートする方法のヒントを紹介します。本当に大量のデータインポートタスクを処理するには、代わりにneo4j-importツールを使用することをおすすめします。

各CSVファイルの行をアイテムの集合として扱うことができるため、さまざまな数の列を処理することは問題にはなりません。

CSVファイルを2回パスしてデータをインポートする必要があります。最初のパスで、Personノードをすべて作成します。 2番目のパスでは、適切なノードに一致させてから、それらの間にリレーションシップを作成します。 2回目のパスを大幅に高速化するには、PersonノードをIDで照合するために、indexまたはuniqueness constraint(インデックスを作成する)のいずれかを作成する必要があります。

私はそれを仮定します:PersonあたりCSVファイルの1行は、その人の固有のIDを持つ、各行の最初の列に、ある

  • Personの行は、その人が誰にも従わない場合は1つの列しか持ちません。 [次] - - >(P2:人{ID:234})

(P1:::人{123 ID})

  • あなたのNeo4jモデルは次のように見えますあなたのCSVファイルの最初の列にIDを使用してPersonノードを作成し、その後

    CREATE CONSTRAINT ON (p:Person) ASSERT p.id IS UNIQUE; 
    

    :まず、一意性制約を作成します。 MERGEを使用して、LOADが列1に重複したIDが存在した場合に(一意性制約のために)中断しないようにします。IDが重複していないと確信できる場合は、代わりにCREATEを使用することができます。メモリの不足を回避するために、我々は処理し、一度に10000行をコミット:

    USING PERIODIC COMMIT 10000 
    LOAD CSV FROM "file:///varying.csv" AS row 
    MERGE (:Person {id: row[0]}); 
    

    最後に、適切なPersonノード間の関係を作成します。このクエリではUSING INDEXヒントを使用して、Cypherが適切なPersonノードをすばやく見つけるためにインデックス(ユニーク制約によって自動的に作成される)を利用するよう促します。繰り返しますが、メモリ不足を避けるため、一度に10000行を処理します。

  • +0

    ありがとうございます。あなたの前提は大丈夫です!もう1つの質問ですが、私はneo4j-importツールのドキュメントを読んでいますが、neo4j-importツールを使用してさまざまな数のCSVをインポートする方法はまだ分かりません。例はすべて標準のCSVファイルに関するものです。 – callofdutyops

    +0

    はい、neo4j-importを使用して列の数が異なるCSVファイルをインポートすることはできません。そのツールは各列のヘッダーに依存しているためです。 – cybersam

    +0

    メソッドを使用してデータを正常にインポートできますが、処理が遅いです。約800万のノードと7億のノード間の関係があります。それは約24時間かかりますが、停止していません。私のラップトップのCPUはIntel Core i5で、SSDと8Gメモリを装備しています。それは本当に高性能のマシンではありませんが、進歩は遅すぎると思います。 – callofdutyops

    関連する問題