java - 将海量数据集导入 Neo4j 非常慢

标签 java mongodb neo4j database

我有一个相当大的数据集,大约有 6800 万个数据点。数据当前存储在 MongoDB 中,我编写了一个 Java 程序,该程序通过数据将数据点链接在一起,并使用 Cypher 命令将它们放入 Neo4j 数据库中。我用一组测试数据(约 150 万)运行了这个程序,它成功了,运行了一夜。现在,当我尝试导入整个数据集时,程序非常慢。跑了整个周末,只有大约 350,000 个数据点成功。通过一些简短的测试,Neo4j 似乎是瓶颈。停止Java程序已经半个小时了,但是Neo4j的CPU使用率为100%,并且仍在添加新节点(来自Java程序)。有什么办法可以克服这个瓶颈吗?我考虑过多线程,但由于我正在尝试创建一个网络,因此存在大量依赖项和正在执行的非线程安全操作。感谢您的帮助!

编辑:我拥有的数据是用户列表。包含的数据是用户 ID 和用户好友 ID 的数组。我的 Cypher 查询看起来有点像这样: "u:USER {id:" + currentID + "}) CREATE (u)-[:FRIENDS {ts:" + timeStamp}]->(u" + connectionID + ":USER {id:" + connectionID + "})" 抱歉,如果这真的很糟糕,对此还很陌生

最佳答案

你应该首先看看这个:

neo4j import slowing down

如果您仍然决定 DIY,那么您应该注意以下几点:首先,请确保您不要尝试在一次事务中导入所有数据,否则您的代码将在大部分时间被暂停垃圾收集器。其次,确保您为 Neo4j 进程(或者您的应用程序,如果您使用的是 Neo4j 的嵌入式实例)提供了足够的内存。 6800 万个节点对于 Neo4j 来说是微不足道的,但如果您生成的 Cypher 不断查找事物,例如创建新的关系,如果没有分配足够的内存,就会遇到严重的分页问题。最后,如果您按属性(而不是 id)查找节点,那么您应该使用标签和模式索引:

http://neo4j.com/news/labels-and-schema-indexes-in-neo4j/

关于java - 将海量数据集导入 Neo4j 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37927062/

相关文章:

java - Hibernate 抛出 ConcurrentModificationException

curl - 尝试 curl Neo4j 时必须提供查询参数

java - Neo4j 中的原语计数

java - 将 MongoCollection<Document> 转换为 DBCollection SpingBoot 1.5.4 到 2.1.0.RELEASE

php - MongoDB:ObjectId 到字符串

java - 密码遍历

java - "Fri Jun 05 00:00:00 PDT 2015"的日期格式是什么

java - 没有类型为 "myOwnType"的合格 bean - 像 String 这样的原始 bean 可以工作

java - 使用 APACHE JENA 自动检测文件扩展名

node.js - Mongoose 关系设计