首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用execute_query、ruby和neography将大量csv数据读入neo4j。

使用execute_query、ruby和neography将大量csv数据读入neo4j。
EN

Stack Overflow用户
提问于 2014-08-14 04:48:45
回答 2查看 160关注 0票数 1

我写了一个快速的ruby例程来加载一些非常大的csv数据。我对尝试使用load_csv的各种内存不足问题感到沮丧,所以我将其恢复为ruby。我对neo4j比较陌生,所以尝试使用新词法来调用我创建为字符串的cypher查询。

cypher代码使用merge添加两个现有节点之间的关系:

代码语言:javascript
运行
复制
cmdstr=match (a:Provider {npi: xxx}),(b:Provider {npi:yyy}) merge (a)-[:REFERS_TO {qty: 1}]->(b);

@neo.execute_query(cmdstr)

我只是循环遍历运行这些代码的文件中的行。在出现套接字错误“无法分配请求的地址”的大约30000行后,它会失败。我认为GC以某种方式引起了问题。然而,日志并没有告诉我任何事情。我尝试过以不同的方式调优GC,并尝试了不同数量的堆。每次都在同一位置失败。感谢您的帮助。

编辑更多信息-运行netstat --inet显示到localhost:7474的数千个连接。execute_query是不是故意不重用连接,还是这是个问题?

我现在已经尝试了参数,并且行为是相同的。如何使用批处理编写这种查询,并确保在npi上使用索引?

EN

Stack Overflow用户

发布于 2014-08-17 04:14:22

在Neo4j 2.1.3中,负载CSV问题得到了解决:

代码语言:javascript
运行
复制
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "http://npi_data.csv" as line
MATCH (a:Provider {npi: line.xxx})
MATCH (b:Provider {npi: line.yyy}) 
MERGE (a)-[:REFERS_TO {qty: line.qty}]->(b);

在你的ruby代码中,你应该使用Cypher参数,可能还有transactional API。您是否以某种方式限制了请求的并发性(例如,单个客户端)?

还要确保为您的提供程序创建了索引或约束:

代码语言:javascript
运行
复制
 create index on :Provider(npi);

代码语言:javascript
运行
复制
 create constraint on (p:Provider) assert p.npi is unique;
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25295858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档