千万级别数据去重思路

只是提供自己想的解决方案,如果大家有更好的方法,欢迎评论交流,谢谢!

1.前景概要

发生较多重复数据的是一个笔记同步接口导致的,由于判断数据是否入库只根据数据是否有主键来判断,有则更新,无则创建

导致的结果就是可能因为网络问题或其它因素导致手机端没有拿到同步结果,并激活了重试机制

每次同步就是当前这本书的所有笔记重新在走一遍同步步骤,最后导致数据库数据直接飙升

表数据有3kw+,由于历史原因,没有做分表处理,目前重复的数据结构是一个json字符串,所以字符会比较复杂,涉及特殊符号,中文名,balabala....

 

2.预防

优化传输数据结构,体积大小

手机端延长重试时间,以及重试次数,禁止失败后立即重试!做好失败的逻辑处理

服务端可对同步方法进行加锁,正常情况下数据不会太多导致同步时间过长

3.正题, 如何去重

1.将有重复数据的表先优化数据结构,优化体积大小,然后导入临时表

2.创建临时字段MD5,并计算需要去重的属性的值

3.直接将去重后的主键ID筛选出来

4.主表备份相关主键ID数据,然后直接删除

mysql本身不止提供了MD5函数

同时还提供了SHA1和SHA2计算

SHA2又包含了SHA-224, SHA-256,SHA-384,SHA-512

都是可以用来做hash计算,然后进行去重的

如果帮到你,请点个赞吧 O(∩_∩)O~

猜你喜欢

转载自blog.csdn.net/qq171563857/article/details/97812683