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,具体怎么设,自己百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值