mysql 高效的去重插入数据

前言:

 我们最简单的想法就是先查询一下,看看这个对象有没有在,如果在,就更新或者删除,或者忽略,如果不在就插入,但是对于数据处理来说,这个可能就有点浪费性能了,而且我们学习的也是批量存储比单一存储要快,单一存储30ms,批量存储10个40ms,批量存储越大,他们两个的差距就越大,又有人提出了select in ,我们批量的去查询,看看键在没在我们批量数据的数组里面,找到在的就忽略掉,确实时间可以快一点,但是处理麻烦,接下来,就要放大招了!

大招

mysql 有一个特性的存储 ON DUPLICATE KEY UPDATE,有就update,没有就更新,当然如果你想忽略就不在更新的地方写东西不就行了,如果你想替换,就将所有的字段更新一遍

关于如何使用,什么例子都不如官网https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

mysql语句会了,再来点配菜

peewee框架对该语句的支持http://docs.peewee-orm.com/en/latest/peewee/api.html#Insert.on_conflict

on_conflict 可以配置重复就更新

on_conflict_ignore 配置重复就忽略

on_conflict_replace 配置重复就替换

测试

9000行数据去重 800ms

44000行数据1-2s,

注意

数据量大了,mysql可能就有点’撑不住‘比如你可能会遇到大数据在存储的时候出现错误MySQL server has gone away (BrokenPipeError(32, 'Broken pipe')),一般是因为max_allowed_packet,客户端和mysql服务器的传输字节数太小了,默认是4m,我一般会设置到100m,具体怎么设,自己百度。

发布了41 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37992974/article/details/103983389