zscat-me 2023-04-28 13:37 采纳率: 0%
浏览 19

java分批查询汇总优化


List<ConsultationTrtcAudit> tracAuditList = new ArrayList<>();
int start = 0;
int end = 0;
int count = consultationNos.size();
// 分批批量查询
while (end < count) {
    end = end + BATCH_QUERY;
    end = Math.min(end, count);
    List<String> consultationNoBatch = consultationNos.subList(start, end);
    ConsultationMarkingRecordDto dto = new ConsultationMarkingRecordDto();
    tracAuditList.addAll(consultatioTrtcAuditMapper.listByConsultationNos(dto));
    start = start + BATCH_QUERY;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-28 16:56
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/231203
    • 这篇博客你也可以参考下:java 分页查询的实现
    • 除此之外, 这篇博客: Java多线程经典案例分享中的 汇总 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 您还可以看一下 程序员研修院老师的Java编程基础课程中的 二进制小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      针对该问题,可以尝试以下优化方法:

      1. 使用分页查询 在进行大量数据查询时,一次性获取所有数据并进行分批处理显然是不可行的。因此可以采用分页查询的方式,每次查询一定数量的数据并处理,避免过多数据的读取和处理。具体实现可以通过设置分页参数,使用limit和offset语句进行查询,并在循环中不断调整offset参数,实现分批查询。

      示例代码:

      int pageSize = 1000;// 每次查询1000条数据 int offset = 0;// 数据偏移量 List dataList = new ArrayList(); while(true){ List pageList = dao.getDataList(offset, pageSize);// 数据库分页查询 if(pageList.isEmpty()){ break; } dataList.addAll(pageList); offset += pageSize; }

      1. 使用多线程进行并行处理 在处理大量数据时,单线程处理效率低下,可以考虑采用多线程进行并行处理。通过将数据分配到多个线程中处理,可以提高整体的处理速度。具体实现可以使用线程池对数据进行分配,每个线程处理一部分数据,最后将处理结果进行汇总。

      示例代码:

      int threadCount = 10;// 创建10个线程进行处理 ExecutorService executor = Executors.newFixedThreadPool(threadCount); List dataList = dao.getDataList();// 获取所有数据 List>> futureList = new ArrayList>>(); int pageSize = dataList.size() / threadCount + 1;// 每个线程处理数据的数量 for(int i = 0; i < threadCount; i++){ int fromIndex = i * pageSize; int toIndex = Math.min((i+1) * pageSize, dataList.size()); List subList = dataList.subList(fromIndex, toIndex); Future> future = executor.submit(new DataProcessor(subList));// 将数据分配给线程池中的线程进行并行处理 futureList.add(future); } List resultList = new ArrayList(); for(Future> future : futureList){ resultList.addAll(future.get());// 等待所有线程处理完毕并将结果进行汇总 } executor.shutdown();// 关闭线程池

      1. 优化代码逻辑,减少多余操作 在进行大量数据处理时,代码逻辑的优化也非常重要。可以通过减少无用的操作和减少代码重复,来提高代码的执行效率。例如,对于需要进行汇总的数据,可以在处理数据的同时记录总和,避免多次遍历数据计算总和。

      示例代码:

      List dataList = dao.getDataList(); int sum = 0; List resultList = new ArrayList(); for(Data data : dataList){ int value = processData(data);// 对数据进行处理 sum += data.getValue();// 计算总和 resultList.add(new Result(data.getId(), value)); } Result summary = new Result(0, sum);// 生成总和结果

    评论

报告相同问题?

问题事件

  • 创建了问题 4月28日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)