如何保存neo4j数据库



我是第一次使用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

同样适用于其他文件。现在有两个问题。首先,如果我的文件很小,则可以很好,但是当文件稍大时,我会得到(我正在处理4个1MB文件) -

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

另一个问题是,每次运行此Ruby文件时,我都不想这样做(填充数据库)。我想一次填充数据,然后不想触摸数据库。之后,我只想在其中进行查询。谁能告诉我如何填充它并保存它?然后,无论何时我想使用它,我如何加载它。谢谢。

创建@neo客户端:

  @neo = Neography::Rest.new

创建队列:

  @queue = []

使用批处理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/master/neo_crunch.rb

可以在这里看到使用队列写入的示例=> http://maxdemarzi.com/2013/09/09/scaling-writes/

听起来好像您并行运行这些请求或不重复使用HTTP连接。

您是否尝试执行@neo=Neography::Rest.new@neo.create_node({...})我认为是重新使用HTTP连接。

您是否在一次大事务中运行整个导入?尝试将其分成10k节点的交易。但是,您仍然不应该遇到"太多的打开文件"。如果您当时执行" LSOF"(终端命令),可以看到哪些文件打开?

所做的数据保留在NEO4J数据库中。我认为该导入失败了此错误,并且由于整个导入在一次大型交易中运行以来都没有任何导入。

请记住,一旦写了所有内容,就可以备份neo4j数据库。在填充数据库并且您正在进行测试的情况下,这很方便。只需复制/data/graph.db文件夹即可。

相关内容

  • 没有找到相关文章

最新更新