最近在做项目的时候涉及到大数据的校验和插入。问题描述:通过Excel导入客户信息表至数据库中指定表。
刚看到该问题,自然而然就是想直接将Excel解析至内存。在内存中遍历对应的客户List集合,取出每一个Customer和数据库中的数据进行比对判断该用户是否存在,存在的话在重复值上计数,不存在的话插入数据库。但是当数据达到10w+的时候,那个速度都不能直视了。思考解决方案,首先采用的解决方案:校验放在外层,里层进行判断分多线程执行。每个线程5k数据。只有5-6 k数据时,还可以。但是当数据量达到10w+时,速度还是很慢。后来测试发现,单单只是用插入其实速度还是可以的,但前面加上验证之后,就严重拖垮了插入速度。但验证还必须使用,苦恼了好一阵。后来通过在网上查找相关资料发现,有一个比较好的解决方案:在数据库的对应校验字段建立唯一索引,在插入的时候让数据库自己进行校验。代码逻辑和数据库分摊压力。在使用save时,由于建立了唯一索引所以插入会出问题,报DataIntegrityViolationException的异常。在Try,catch中将其捕捉,进行重复值的累计。这时,之前想要的效果已经实现。
大数据的验证和插入数据库
|
阅读量