万次对数据库查询操作 效率非常慢,如何解决?
现在是这样的
我需要批量导入 用户:(导入内容为:用户编号)
导入的同时,对用户进行业务校验,通过校验的就可以入库。
每一次校验都得到数据库里取相关信息,用户有3万条,这样执行速度非常慢?
大侠 帮出出主意
[b]问题补充:[/b]
关键是 3万条记录 进行3万次校验 要做3万次数据库查询,
用户编号是加密的,是唯一的,也是是查询必要条件,每一用户查询出来的记录是一条
慢就慢在 查询数据库
用线程池,大概10条线程左右,把3万条作业分给10个线程。估计速度大概提高3倍左右。当然,线程不是越多越好,视CPU的个数和处理能力而定,通常多CPU的系统用线程的效率还是非常明显的。
可以用spring和hibernate快速搭建这样一个基于线程的导入平台。假如你的数据库访问本来就是Hibernate的话。就更简便了。起一个新项目,把原来平台的Hibernate的mapping和持久化类直接拷贝过来就可以直接用。其实就是搭建一个快速的只有数据库访问的小系统。用单个类启动spring就可以用,而且这个小系统可以重复使用,只需要修改一下配置,用工具从数据库生成一下Hibernate的mapping就可以了。
[b]每一次校验都得到数据库里取相关信息[/b]
如果这个信息不变,可以放到内存中。
看你的描述,你肯定是在手上已经拿到了1W条要导入的数据.
建议: 1百为单位进行循环, 在循环里面对100条进行校验, 校验完毕再一次性100条批量插入. 再循环.
首先,LZ没有说明你的业务校验复杂度.
如果仅仅是对单个表的数据进行校验的话.
几万条数据直接放到内存里,也就是
select 校验字段 from youtable
得到的就是一个数组了,然后和要进行插入的数据进行对比就行了.