5

初めてneo4jを使用しています。Rubyのneographyです。私のデータはcsvファイルにあります。メインファイルを介してデータベースを正常に作成できます。つまり、すべてのノードを作成できます。したがって、各csvファイル(ここではuser.csv)について、私はやっています-

def create_person(name, id)
  Neography::Node.create("name" => name, "id" => id)
end

CSV.foreach('user.csv', :headers => true) do |row|
  id = row[0].to_i()
  name = row[1]
  $persons[id] = create_person(name, id)
end

他のファイルについても同様です。現在2つの問題があります。まず、ファイルが非常に小さい場合は問題ありませんが、ファイルが少し大きい場合は (4 つの 1MB ファイルを扱っています) -

SocketError: Too many open files (http://localhost:7474)

もう 1 つの問題は、この ruby​​ ファイルを実行するたびにこれを実行したくない (データベースにデータを追加する) ことです。データを一度入力した後、データベースに触れたくありません。その後、クエリを実行したいだけです。誰かがそれを入力して保存する方法を教えてもらえますか? そして、使いたいときにいつでもロードするにはどうすればよいですか。ありがとうございました。

4

4 に答える 4

2

これらのリクエストを並行して実行するか、http 接続を再利用しないかのように聞こえます。

やろうとしましたか、http接続を再利用している@neo=Neography::Rest.new@neo.create_node({...})思います。

于 2014-02-02T23:04:36.037 に答える
2

@neo クライアントを作成します。

  @neo = Neography::Rest.new

キューを作成します。

  @queue = []

データのロードには BATCH API を使用します。

def create_person(name, id)
  @queue << [:create_node, {"name" => name, "id" => id}]
  if @queue.size >= 500
    batch_results = neo.batch *@queue
    @queue = []
    batch_results.each do |result|
      id = result["body"]["self"].split('/').last
      $persons[id] = result
    end
  end
end

csv ファイルを実行します。

CSV.foreach('user.csv', :headers => true) do |row|
  create_person(row[1], row[0].to_i)
end

残り物を取得します。

    batch_results = @neo.batch *@queue
    batch_results.each do |result|
      id = result["body"]["self"].split('/').last
      $persons[id] = result
    end

Rest API を介したデータ読み込みの例は、ここで確認できます => https://github.com/maxdemarzi/neo_crunch/blob/master/neo_crunch.rb

書き込みにキューを使用する例は、ここで確認できます => http://maxdemarzi.com/2013/09/05/scaling-writes/

于 2014-02-03T04:15:34.297 に答える
0

すべてを書き終えたら、Neo4j データベースをバックアップできることを忘れないでください。これは、データベースの作成に時間がかかり、テストを行っている場合に便利です。/data/graph.dbフォルダのコピーを作成するだけです。

于 2014-02-22T06:10:16.520 に答える
0

インポート全体を 1 つの大きなトランザクションで実行していますか? たとえば、10k ノードのトランザクションに分割してみてください。ただし、「開いているファイルが多すぎる」という問題に遭遇することはありません。その時に「lsof」(端末コマンド)をすると、どのファイルが開いているか分かりますか?

コミットされたデータは、neo4j データベースに保持されます。インポート全体が 1 つの大きなトランザクションで実行されるため、このエラーでインポートが失敗し、インポートされたままになるものは何もないと思います。

于 2014-02-02T20:49:49.067 に答える