Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j顺序数据库事务问题_Neo4j_Spring Data Neo4j - Fatal编程技术网

Neo4j顺序数据库事务问题

Neo4j顺序数据库事务问题,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,我有一个SpringDataNeo4j应用程序,需要对Neo4j社区版(3.2)进行批量数据写入/读取 我的系统配置(Macbook pro) 16GB内存,2.5GHz Intel Core i7 节点总数:120000。(5每个节点中的属性。) 我每个节点有500个关系 以上节点/关系是应用程序其他部分工作所需的初始数据的一部分 我使用Spring数据Neo4j进行读/写事务。每个节点按顺序构建其对应的500个关系。因此,显然,构建上述所有节点和关系需要大量时间 示例代码: 实体: //Ne

我有一个SpringDataNeo4j应用程序,需要对Neo4j社区版(3.2)进行批量数据写入/读取

我的系统配置(Macbook pro) 16GB内存,2.5GHz Intel Core i7

节点总数:120000。(5每个节点中的属性。)

我每个节点有500个关系

以上节点/关系是应用程序其他部分工作所需的初始数据的一部分

我使用Spring数据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...

}
//Neo4j实体类
导入org.neo4j.ogm.annotation.GraphId;
导入org.neo4j.ogm.annotation.NodeEntity;
导入org.neo4j.ogm.annotation.Relationship;
@节点性
公共类SamplePojo{
@格拉希德
公共长id;
私有字符串属性1;
私有字符串属性2;
私有整数属性3;
私人双重财产4;
私有整数属性5;
@关系(type=“has\u sample\u Relationship”,direction=“OUTGOING”)
List sampleList=new ArrayList();
//接球手和接球手。。。
}
存储库:

import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;

@Repository
public interface SamplePojoRepository extends GraphRepository<SamplePojo> {

//save

}
import org.springframework.data.neo4j.annotation.Query;
导入org.springframework.data.neo4j.repository.graphresposition;
@存储库
公共接口SamplePojoRepository扩展了GraphRespository{
//拯救
}
服务类别:

  @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

    }  
}
     }
@服务
公共类数据插入{
@自动连线
样本库;
公共书写工具4J(列表pojoList){
for(SamplePojo p:pojoList){
//循环遍历100000多个具有属性集和关系的对象
repository.save();//保存到neo4j数据库
}  
}
}
我的观察:

最初,, 最初几分钟,每分钟执行1200次写入操作

几分钟后,写入操作从1200显著下降到100次写入操作/分钟

后来,它下降到每分钟10次写操作

有人知道为什么Neo4j写操作会随着时间的推移而变慢这个问题的根本原因吗


如果需要更多信息,请告知我,我将更新问题。提前谢谢

这是一个非常宽泛的问题,您至少应该分析一下您的应用程序,以确定哪个部分的速度变慢了—是Neo4j本身吗?具体问题?弹簧数据Neo4j?你的申请?这样就更容易帮助你了

通常的嫌疑犯是:

  • 您的事务太大-将负载拆分为1k到50k个元素(节点+关系+属性)的较小事务-这是必需的,因为Neo4j将事务状态保存在内存中,并且当您有大型事务时,它可能在GC中花费太多时间(甚至耗尽内存)

  • 不断增长的OGM会话-再次导致在GC中花费大量时间-不时清除会话(当
    @Transactional
    方法完成时,应使用SDN自动完成此操作)

  • 有些没有索引的操作会随着数据量的增加而变慢(例如,执行完整节点标签扫描而不是使用索引)

  • Neo4j或您的应用程序内存不足-时间主要花在GC上

  • SDN/OGM可能存在性能问题-一个可复制的测试用例将非常适合这一点


这是一个非常广泛的问题,您至少应该分析您的应用程序,以确定哪个部分的速度会减慢—是Neo4j本身吗?具体问题?弹簧数据Neo4j?你的申请?这样就更容易帮助你了

通常的嫌疑犯是:

  • 您的事务太大—将负载拆分为1k到50k元素(节点+关系+属性)的较小事务-这是需要的,因为Neo4j在内存中保留事务状态,当您有大型事务时,它可能会在GC中花费大量时间(甚至耗尽内存)

  • 不断增长的OGM会话-再次导致在GC中花费大量时间-不时清除会话(当
    @Transactional
    方法完成时,应使用SDN自动完成此操作)

  • 有些没有索引的操作会随着数据量的增加而变慢(例如,执行完整节点标签扫描而不是使用索引)

  • Neo4j或您的应用程序内存不足-时间主要花在GC上

  • SDN/OGM可能存在性能问题-一个可复制的测试用例将非常适合这一点


我读过:但没有一个答案能准确解释它发生的原因。我读过:但没有一个答案能准确解释它发生的原因。谢谢您的回复!更新了我的问题。@TanmayDelhikar我没有看到任何
@Transactional
注释,所以我猜事务太大了-将列表拆分并按1k大小批量保存感谢回复!更新了我的问题。@TanmayDelhikar我没有看到任何
@Transactional
注释,所以我猜事务太大了-将列表拆分并按1k大小批量保存