A tutorial here显示了如何在PHP中构建agregator,但我找不到在数据库中插入相同项目的最佳方法。
如果我在http://visualwebsiteoptimizer.com/split-testing-blog/feed/上运行脚本,然后在5分钟内再次运行它,它将再次插入相同的项目。
该教程只是指定了一个间隔时间,它会重新加载RSS源并保存所有项目。
我想知道RSS是否实现了一些只在特定日期之后发送项目的请求标头。我看到here我可以使用lastBuildDate和mabe忽略日期早于上次获取的频道,但它没有说明这是否是强制性的。
我的问题是:如何定期检查RSS源并将其插入数据库而不必多次插入相同的项目?
我认为唯一的方法是使用链接检查记录是否已经存在,如果已经存在则只插入。我知道链接是可选的,但我不会保存那些没有链接的项目。这似乎有点低效;在每次插入之前检查可能在开始时没有问题,但是当数据库开始填满时它可能会变得很慢。
答案 0 :(得分:1)
您可能必须使用一些不同的策略,具体取决于您所使用的网站实施规范的程度。
首先,我会尝试在数据库中为GUID值添加一个唯一索引,GUID的性质应该是唯一的,http://en.wikipedia.org/wiki/Globally_unique_identifier - 然后根据您使用的数据库,您应该能够使用{{ {1}}或INSERT IGNORE INTO...
只是让更新语法没有真正做任何事情
如果某些网站没有guid字段(我假设您最终会消耗的不仅仅是示例),您可以在siteId字段中添加唯一字段,无论是时间还是标题,都是当然不太理想,联系网站自己让他们实施guid也可能有用;)
您还可以在帖子内容上运行md5哈希并将其存储在帖子旁边,这也应该会停止重复。
您期望DB获得多大的收益?通过适当的索引,我会认为它在运行缓慢之前必须是巨大的; siteId,guid,time和/或hash上的索引只限于1行,只有rowId应该足够快,如果你可以让你的脚本在cron作业而不是通过webserver运行命令行/那么epscialyl