有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
解析数据
更新索引
1 2 3 4 5
| drop index idx_orgCode_projectId on t_json_data;
create index idx_orgCode_projectId on t_json_data (project_id, orgcode) comment ' 单位项目联合索引 ';
|
可以看到,更新顺序后在全量查询的时候走了索引,未更新前并没有走索引。
添加多线程支持
优化了这里性能在本地是有显著提升的,优化前差不多是 78 秒,优化完之后 2 秒多的样子。
但是这里遇到一个问题,只有 idea 启动的才快,使用 java -jar
手动启动提升,但是并没有那么惊艳。
那么这里打算继续优化
单表插入改为批量插入
原逻辑是单表查询的,这里改成批量添加比较复杂,改动就比较大了,改动中 ing。。。。
汇总数据
这里主要有两个大坑
- 大量的单行插入,改为批插
- 使用 IdUtil 生成随机 id,性能真拉跨,总共耗时 2 秒多,解决方法是手写了一个 ID 生成类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package com.nari.common.utils;
import lombok.Getter; import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j public class IdUtilV2 { @Getter private static volatile IdUtilV2 instance;
static { instance = new IdUtilV2(); id = System.nanoTime(); }
private static Long id; private AtomicInteger ids = new AtomicInteger(1);
private IdUtilV2() { }
public String getIdStr() { return cn.hutool.core.util.IdUtil.fastSimpleUUID(); }
public Long getId() { Long value = Long.valueOf(id + "" + (ids.incrementAndGet())); log.warn("id--:{}", value); return value; } }
|
导出性能优化
这里单独写了一篇文章总结:http://blog.zysicyj.top/3ffdfec