[JAVA][新项目建设奇奇怪怪的问题]多线程优化-查询树形数据性能问题

65 阅读1分钟

背景:

前期调研不够专业, 对于Subject(业务)数据量存在误判, 100->10000

  • 代码使用递归算法, 依照数据库配置生成树形数据结构, 返回给前台

问题:

查询慢 (10000+树状数据--->102秒)

  • 每次递归都会查询数据库

  • 索引未执行

解决:

  • 要求开发人员, 此表查询必须按 指定租户信息顺序条件 查询, 执行索引

  • 子节点递归使用并行流 parallelStream

    • fork join算法的并行流遇上非平均的业务数据效果不好,且存在数据库IO耗时,故改用CompletableFuture.supplyAsync并指定线程池(如不指定仍然是fork join)

最终耗时降至6秒, 不大改代码且客户可接受