我写了一个快速的ruby例程来加载一些非常大的csv数据。我对尝试使用load_csv的各种内存不足问题感到沮丧,所以我将其恢复为ruby。我对neo4j比较陌生,所以尝试使用新词法来调用我创建为字符串的cypher查询。
cypher代码使用merge添加两个现有节点之间的关系:
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上使用索引?
发布于 2014-08-17 04:14:22
在Neo4j 2.1.3中,负载CSV问题得到了解决:
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。您是否以某种方式限制了请求的并发性(例如,单个客户端)?
还要确保为您的提供程序创建了索引或约束:
create index on :Provider(npi);或
create constraint on (p:Provider) assert p.npi is unique;https://stackoverflow.com/questions/25295858
复制相似问题