事情是这样的,我现在用curl搞采集,每次采集一个新网址都会和已经采集的网址进行比较,如果已经存在则进行跳过,但现在已经存在的网址有3万条了,每次采集一条新网址则将会在数据库当中进行3万次比较,我现在用的是数据库当中的比较方法例如
select * from 数据库 where url=新url如果查询到则跳过,但现在的速度非常慢,不知道如何解决这一问题。
select * from 数据库 where url=新url如果查询到则跳过,但现在的速度非常慢,不知道如何解决这一问题。
//已经存在
} else {
//不存在
$web_urls[$url]=1;
}如果数据量很大,可以用trie树节省存储空间。
字典树就是存储和检索网址的数据结构,2万个网址放入字典树中
数据库中无法使用字典树,数据库一般内置hash和B树,你可以用hash或者B树建索引
不过你的程序,如果要连数据库才能判断,还不如用memcached,比数据库更高效直接用关联数组是最方便的,性能也应该差不到哪里去
关联数组内部实现,性能再低也要是个红黑树或者B树,平均15次检索可以在3万多条数据中检索了
这个判定所消耗的时间,跟从网络中抓页面比,基本是忽略不计的,对这个做优化没有多少意义