【发布时间】:2017-06-23 15:32:45
【问题描述】:
我有一个 Spring Data Neo4j 应用程序,需要对 Neo4j 社区版 (3.2) 进行批量数据写入/读取。
我的系统配置(Macbook pro) 16GB RAM,2.5 GHz Intel Core i7。
节点总数:120,000。 (5 个属性在每个节点中。)
每个节点我有 500 个关系。
以上节点/关系是我需要应用程序的其他部分工作的初始数据的一部分。
我使用 Spring Data Neo4j 进行读/写事务。每个节点依次构建其对应的 500 个关系。显然,构建上述所有节点和关系需要大量时间。
示例代码:
实体:
//Neo4j entity class
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
@NodeEntity
public class SamplePojo {
@GraphId
public Long id;
private String property1;
private String property2;
private Integer property3;
private Double property4;
private Integer property5;
@Relationship(type="has_sample_relationship",direction="OUTGOING")
List<SamplePojo> sampleList = new ArrayList<>();
//Getters and setters...
}
存储库:
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
@Repository
public interface SamplePojoRepository extends GraphRepository<SamplePojo> {
//save
}
服务类:
@Service
public class DataInsertion{
@Autowired
SamplePojoRepository repository;
public writeToNeo4j(List<SamplePojo> pojoList){
for(SamplePojo p : pojoList){
// Loop through more than 100,000 objects that have properties set and relationships as well
repository.save(); // save to neo4j db
}
}
}
我的观察:
最初, 前几分钟,1200 次写入操作/分钟。
几分钟后,写入操作从 1200 显着下降到 100 个写入操作/分钟。
后来,它降至 10 次写入操作/分钟。
有人知道为什么 Neo4j 写入操作会随着时间变慢的根本原因吗?
如果需要更多信息,请告诉我,我们会更新问题。提前致谢!
【问题讨论】:
-
我已阅读:stackoverflow.com/questions/19589687/…,但没有一个答案能准确解释它发生的原因。