项目里有这样一个需求 通过excel导入大量数据(结构化数据)

之前的方案是前端选择excel丢给后端读取 然后后端把读取到的数据返回给前端 前端修改完后再提交到后端 最后入库

看着完美 实在一塌糊度 数据量小没的问题 一旦数据量大了上去 各种问题
1、因为要批量修改 所以后端把所有数据都吐给了前端 然后由前端做分页 这就导致了前端的卡顿
2、后端把所有数据都吐给了前端 接口返回值就会很大 请求就会很慢
3、前端修改完把所有数据再提交给后端 同样很慢

优化的方案
后端读取到的数据不再返回给前端 而是存入到redis里缓存住 key为前端提供唯一标识uuid 这样前端就可以拿着uuid来对redis里的数据进行增删改查 具体实现细节后续会发出 不过要先提到一点 就是已经入库的数据会先从数据库里取出 然后存到redis里
image
image
image
image
image
image
以上就是实现的细节

一、再有就是导入excel可能要校验数据的真实性 要与数据库里数据去对 那么大数据量的话 一条条的去对 因为会频繁的与数据库连接 性能是极其糟糕的 这里也顺便做了优化

优化点主要有两个
1、做批量查询 用in代替eq 减少与数据库的连接
2、做缓存 查过了就不会再查了 进一步 减少与数据库的连接
image
image
image
image
image
image
image
image
以上就是实现的细节

因为java并不是我的本职 所以代码写的会比较啰嗦 还请见谅!!!


卡米撒吗
117 声望8 粉丝