爬虫, mysql 唯一索引 重复数据 ID 会自增。请问怎么解决?

2018-12-26 14:52:26 +08:00
 mon3
看了一下 scrapy 没这问题。
5315 次点击
所在节点    Python
41 条回复
realpg
2018-12-26 17:10:31 +08:00
innodb 不重复都会出现跳 ID 事务机制导致的
xpresslink
2018-12-26 17:10:36 +08:00
@mon3

alter table tablename drop column id;
alter table tablename add id mediumint(8) not null primary key auto_increment first;
xpresslink
2018-12-26 17:11:32 +08:00
我觉得没有必要执念于此。
holajamc
2018-12-26 17:12:49 +08:00
@mon3 采集完全没有必要 24 小时工作呀,而且上亿的数据布隆过滤器足够应付…
gaius
2018-12-26 17:22:18 +08:00
是自增主键跳了吗,正常,多线程插入就会跳。
fyxtc
2018-12-26 17:22:37 +08:00
gouchaoer2
2018-12-26 17:57:41 +08:00
@fyxtc ???!!!
tingfang
2018-12-26 18:02:01 +08:00
on duplicate key update 重复是会跳号的。
EvilCult
2018-12-26 18:39:19 +08:00
@glacer
@aborigine
我读书少你们两个不要骗我, 我要是没记错的话:
设置 UNIQUE 索引后(比如 A)
执行 INSERT INTO `TABLE` (A,B) VALUES (123,456) ON DUPLICATE KEY UPDATE B = 456;
这是更新旧有行的吧~~
rocketman13
2018-12-26 18:48:03 +08:00
看 mysql 日志就可以了,应该是先写入,再删除
chinvo
2018-12-26 18:55:08 +08:00
自己实现 UPDATE OR INSERT 啦

如果你用 orm,一般 orm 会提供的

没提供的话也就是查询两次的事,一次查 ID 是否存在,一次插入 /更新数据
mon3
2018-12-26 19:19:38 +08:00
@chinvo 哪个 ORM 可以实现?
chinvo
2018-12-26 19:20:38 +08:00
@mon3 我用 sqlalchemy,没仔细研究,应该是没有的,所以我查两次
ooh
2018-12-26 19:46:59 +08:00
lz 是发现主键 ID 不连续吧,MySQL InnoDB 插入数据是先自增主键 ID,然后再写入数据,因为你有唯一键,所以重复的时候插入失败,但是主键 ID 已经自增了,如果你没办法保证插入不重复的数据,那么把 InnoDB 换成 MyISAM 即可
aborigine
2018-12-26 19:51:18 +08:00
@EvilCult 你去试试就知道了
Mac
2018-12-26 19:55:36 +08:00
@mon3 哦,我理解题目错了,我以为是出现重复记录。原来是自增跳号。innodb 就是这样的,myisam 没有这个问题。
EvilCult
2018-12-26 20:27:03 +08:00
@aborigine 等下,看了 34 楼,我发现我好像看错题了…………囧…………
你们说的是 on duplicate update 后再查数据自增 ID 不连续吧…………[手动捂脸]
chengxiao
2018-12-26 20:45:19 +08:00
加一层 redis set 去重啊 入库前先判断 set 里有没有 有了 pass 没有了 set+1 入库
另外你不要爬一条插一条啊 肯定是到最后一起提交的
Nick2VIPUser
2018-12-26 23:51:34 +08:00
很早遇到这个问题,不过我觉得这不算问题,id 只是一个唯一标识而已,跳号其实没有影响;
如果可以的话,在数据爬完之后另外找一个库重新写入一遍也是可以的。
pan404
2018-12-27 09:57:11 +08:00
你是想说数据重复了没清洗掉吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX