Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Java 提高查询响应时间JPA Spring Boot(使用preivous select进行批插入)_Java_Spring_Spring Boot_Hibernate_Jpa - Fatal编程技术网

Java 提高查询响应时间JPA Spring Boot(使用preivous select进行批插入)

Java 提高查询响应时间JPA Spring Boot(使用preivous select进行批插入),java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,我想知道做以下事情的最佳方法是什么: 客户端将100条记录的json发送到spring引导应用程序,以插入数据库 但是在插入之前,我必须执行一个查询来验证100条记录中每条记录的一些数据。然后插入 我目前有: for(int i= 0; i < productos.size(); i++) { productos.get(i).setIdvehiculo(productoRepository.findTesting("49878&qu

我想知道做以下事情的最佳方法是什么:

  • 客户端将100条记录的json发送到spring引导应用程序,以插入数据库
  • 但是在插入之前,我必须执行一个查询来验证100条记录中每条记录的一些数据。然后插入
我目前有:

    for(int i= 0; i < productos.size(); i++) {
        
        productos.get(i).setIdvehiculo(productoRepository.findTesting("49878", 3)); // ----> NATIVE QUERY EXECUTION TAKES 100ms I THINK
        productoRepository.save(productos.get(i)); // ----> INSERT
    
    }
    
    //productoRepository.saveAll(productos);
    entityManager.flush();
    entityManager.clear();
    
for(int i=0;i我认为本机查询执行需要100毫秒
productoRepository.save(productos.get(i));//--->INSERT
}
//productoRepository.saveAll(productos);
entityManager.flush();
entityManager.clear();

这需要10秒。。。执行选择和插入操作。100条记录,10秒,不是很长吗?

不要在for循环中插入1:1,只需在那里构建模型并将该模型添加到ArrayList中,完成记录处理后,在循环外调用saveAll(productos list)。

  • 尝试启用二级缓存。这将缩短验证时间。根据数据的重要性,还可以在应用程序级别缓存实体

  • 创建事务以
    保存
    实体。这将允许数据库利用并发控制

  • 查看是否可以更改体系结构以启用队列(可以是Kafka Q),另一个应用程序使用该Q来写入数据库


我该怎么做?我运行上面的方法已经有@Transactional标记。问题是findTesting,没有它,我需要3秒钟…我之前的评论越来越大,将其作为答案发布。问题是findTesting方法平均需要100毫秒。。。100条记录x100百万Sok刚刚看到,做一件事,检查本机查询中使用的表是否可以被索引。我已经添加了@transactional。我该怎么做(缓存L2)?问题是findTesting,如果没有它,我需要3秒钟…,启用缓存后,
findTesting
成本会降低。检查链接。