the*_*est 5 ruby csv neo4j neography
我第一次使用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
Run Code Online (Sandbox Code Playgroud)
同样适用于其他文件.现在有两个问题.首先,如果我的文件非常小,那么它很好,但是当文件稍大时,我得到(我正在处理4个1MB文件) -
SocketError: Too many open files (http://localhost:7474)
Run Code Online (Sandbox Code Playgroud)
另一个问题是我每次运行这个ruby文件时都不想这样做(填充db).我想填充数据一次,然后不想触摸数据库.之后我只想对它运行查询.任何人都可以告诉我如何填充并保存它?然后,无论何时我想使用它,我该如何加载它.谢谢.
创建一个@neo客户端:
@neo = Neography::Rest.new
Run Code Online (Sandbox Code Playgroud)
创建队列:
@queue = []
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
运行您的 csv 文件:
CSV.foreach('user.csv', :headers => true) do |row|
create_person(row[1], row[0].to_i)
end
Run Code Online (Sandbox Code Playgroud)
获取剩菜:
batch_results = @neo.batch *@queue
batch_results.each do |result|
id = result["body"]["self"].split('/').last
$persons[id] = result
end
Run Code Online (Sandbox Code Playgroud)
通过其余 api 加载数据的示例可以在这里看到 => https://github.com/maxdemarzi/neo_crunch/blob/master/neo_crunch.rb
使用队列进行写入的示例可以在这里看到 => http://maxdemarzi.com/2013/09/05/scaling-writes/
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |