前言:

最近在优化一个功能,这个功能就是将80000 条数据按照分页分段获取,首先获取的是前1000条数据,将这些数据按照一定的规则解析完以后,使用 jdbcTemplate 的batchUpdate 批量导入功能将数据保存到数据库中,这1000条数据解析的时间随着表中数据不断累加而加长,因为我这个猪脑子写了一个有则不添加数据,无则添加数据的逻辑,导致这速度是不忍直视。

后面在优化过程我想着不如给表设置一个唯一约束吧,

在Native Premiumn中设计一下表,点到索引里面,将我下面这些值设置进去。由于我想将description这个字段设置成唯一约束,但是MySql 报错了,提示字段长度过长无法设置,此时我这个description字段的类型是text

 

后面问了一下度娘 ,提供了一个好的解决办法,重新建一个字段,将原来description中的值通过md5 加密的方式保存到数据库,通过对这个新添加的description_md5这个字段设置唯一约束,当然了,加密方式可以自由选择,这样的话 唯一约束也已经建立起来。description_md5 这个字段的最大长度为255。

 

 

最后一个重要环节出来了,当我将一个字段插入到数据库成功后,第二次遇到相同字段的值程序直接报错。

在使用jdbcTemplate 保存的时候我的sql用的是insert ,将这个insert into 换成replace 已解决。

replace 第一次插入数据成功,第一次会将原来的数据删除,重新生成一条,百度上还有一种方式是insert 字段替换为ingore,我试了一下没有效果。

参考文章:https://blog.csdn.net/tomcat_zhu/article/details/82911158

 

最后小伙伴们可能有些疑问,第一个问题可能是为什么我要用jdbcTemplate的批量导入功能,而不使用JPA 等方法,原因是小编这个功能的数据量很大,小编测试过了 在大数据的情况下,使用jdbcTemplate的批量导入的写法会将JPA的快, 50w数据能快2,3分钟。

第二个疑问是小编你的技术还不是很过关啊 

哈哈 我接受。小编会努力的。

如果你有什么好的解决办法的话欢迎评论区留言互动,

如果觉得小编写的不错的话,不妨给小编一个赞吧 哈哈!

 

Logo

更多推荐