0

此处的教程展示了如何在 PHP 中构建聚合器,但我在寻找不在我的数据库中插入相同项目的最佳方法时遇到了一些麻烦。

如果我要在http://visualwebsiteoptimizer.com/split-testing-blog/feed/上运行脚本,然后在 5 分钟内再次运行它,它只会再次插入相同的项目。

该教程仅指定了一个间隔时间,它将重新加载 RSS 提要并保存所有项目。

我想知道 RSS 是否实现了一些仅在特定日期之后发送项目的请求标头。我在这里看到我可以使用 lastBuildDate 和 mabe 忽略日期早于上次获取的频道,但它没有说明这是否是强制性的。

我的问题是:如何定期检查 RSS 提要并将其插入数据库而不多次插入同一项目?

我在想唯一的方法是使用链接检查记录是否已经存在,并且只有在它不存在时才插入。我知道链接是可选的,但我不会保存没有链​​接的项目。不过,这似乎有点低效;在每次插入之前检查可能在一开始就很好,但是当数据库开始填满时,它可能会变得非常慢。

4

1 回答 1

1

根据您使用的网站实施规范的程度,您可能必须使用几种不同的策略。

首先,我会尝试在数据库上为 GUID 值添加一个唯一索引,GUID 本质上应该是唯一的,http ://en.wikipedia.org/wiki/Globally_unique_identifier - 然后取决于您使用的数据库,您应该能够使用类似INSERT IGNORE INTO...or的语法INSERT ... ON DUPLICATE KEY UPDATE...,只是让更新语法没有真正做任何事情

如果某些网站没有 guid 字段(我假设您最终会消耗的不仅仅是示例),您可以在 siteId 字段上添加唯一的时间或标题,当然两者都不理想联系自己的网站以让他们实施 guid 也可能有效;)

您还可以在帖子内容上运行 md5 哈希并将其存储在帖子旁边,这也应该停止重复。

你期望数据库有多大?通过适当的索引,我会认为它在运行缓慢之前必须是巨大的;siteId,guid,时间和/或哈希上的索引,并且仅限于 1 行,并且只有 rowId 应该足够快,epscialyl 如果你可以让你的脚本在 cron 作业上运行命令行/而不是通过网络服务器

于 2013-05-24T08:40:10.140 回答