1
holajamc 2018-12-26 14:59:25 +08:00
虽然我不懂你说了什么,但是 INSERT 数据难道 ID 不应该自增?
|
2
bestie 2018-12-26 15:03:51 +08:00
不懂你说了什么,插了数据当然会自增,不知道你是怎么判断重复的,重复的跳过就是了
|
3
Vegetable 2018-12-26 15:28:57 +08:00
我猜是说,判断重复的数据后并灭有插入,但是 ID 却消耗掉了.可能和 on duplicate key update 的问题类似吧.
|
4
xkeyideal 2018-12-26 15:37:41 +08:00
难道爬虫都不过滤重复数据了么,布隆过滤器了解一下
|
6
gouchaoer2 2018-12-26 15:43:13 +08:00
用框架就意味着你失去灵活性,就这么简单的任务都无法搞定,所以少用框架
|
7
lihongjie0209 2018-12-26 15:43:49 +08:00
@mon3 你数据能设置唯一索引, 你代码过滤不了? 数据库不是代码??
|
8
loveCoding 2018-12-26 15:52:09 +08:00
这是业务问题,跟框架没什么关系
|
9
Mac 2018-12-26 15:55:39 +08:00
你该去好好看看 INSERT 语句 ON DUPLICATE 时的用法了。
|
10
EvilCult 2018-12-26 15:58:11 +08:00
同意 3 楼....
是不是写入的时候用的是“ replace into ” 而不是 “ on duplicate key update ” |
11
xpresslink 2018-12-26 16:21:11 +08:00
以前用过 scrapy+django+djangoitem 爬到内容直接用 django ORM 入库,每条信息都会有一个唯一索引用识别,
再爬的时候 Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'}) |
14
xpresslink 2018-12-26 16:45:21 +08:00
@xpresslink #11,写错了应该是用 .objects.update_or_create,没有就新建,有就更新。
|
16
mon3 OP @xpresslink 表的数据有的不能更新的,所以这个办法不太适合我。。
|
17
xpresslink 2018-12-26 16:57:23 +08:00
|
18
mon3 OP @xpresslink 有重复数据的话直接丢弃,这步 mysql 自动执行了,但是 ID 也会增长,我需要的是 ID 不增长,数据直接丢。
|
21
realpg 2018-12-26 17:10:31 +08:00
innodb 不重复都会出现跳 ID 事务机制导致的
|
22
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; |
23
xpresslink 2018-12-26 17:11:32 +08:00
我觉得没有必要执念于此。
|
25
gaius 2018-12-26 17:22:18 +08:00
是自增主键跳了吗,正常,多线程插入就会跳。
|
26
fyxtc 2018-12-26 17:22:37 +08:00
@gouchaoer2 ???
|
27
gouchaoer2 2018-12-26 17:57:41 +08:00
@fyxtc ???!!!
|
28
tingfang 2018-12-26 18:02:01 +08:00
on duplicate key update 重复是会跳号的。
|
29
EvilCult 2018-12-26 18:39:19 +08:00
|
30
rocketman13 2018-12-26 18:48:03 +08:00
看 mysql 日志就可以了,应该是先写入,再删除
|
31
chinvo 2018-12-26 18:55:08 +08:00
自己实现 UPDATE OR INSERT 啦
如果你用 orm,一般 orm 会提供的 没提供的话也就是查询两次的事,一次查 ID 是否存在,一次插入 /更新数据 |
34
ooh 2018-12-26 19:46:59 +08:00
lz 是发现主键 ID 不连续吧,MySQL InnoDB 插入数据是先自增主键 ID,然后再写入数据,因为你有唯一键,所以重复的时候插入失败,但是主键 ID 已经自增了,如果你没办法保证插入不重复的数据,那么把 InnoDB 换成 MyISAM 即可
|
36
Mac 2018-12-26 19:55:36 +08:00 via Android
@mon3 哦,我理解题目错了,我以为是出现重复记录。原来是自增跳号。innodb 就是这样的,myisam 没有这个问题。
|
37
EvilCult 2018-12-26 20:27:03 +08:00 via iPhone
@aborigine 等下,看了 34 楼,我发现我好像看错题了…………囧…………
你们说的是 on duplicate update 后再查数据自增 ID 不连续吧…………[手动捂脸] |
38
chengxiao 2018-12-26 20:45:19 +08:00
加一层 redis set 去重啊 入库前先判断 set 里有没有 有了 pass 没有了 set+1 入库
另外你不要爬一条插一条啊 肯定是到最后一起提交的 |
39
Nick2VIPUser 2018-12-26 23:51:34 +08:00
很早遇到这个问题,不过我觉得这不算问题,id 只是一个唯一标识而已,跳号其实没有影响;
如果可以的话,在数据爬完之后另外找一个库重新写入一遍也是可以的。 |
40
pan404 2018-12-27 09:57:11 +08:00
你是想说数据重复了没清洗掉吧
|
41
qaz564172564 2019-01-14 13:06:24 +08:00
去重啊,偷懒的话 url 设为主键不久 ok 了
|