我现在正在开发一个必须获取用户提要的网站。但是,如果我有一个数据库,比方说,有 300 个提要,我如何才能最好地优化抓取。我打算设置一个 cron-job 来获取提要,但我应该像每秒钟 5 次那样做吗?
关于如何在 PHP 中以最佳方式做到这一点有什么想法吗?
最佳答案
如果我理解你的问题,你基本上是在一个 feed 聚合网站上工作?
您可以执行以下操作;首先每 1 小时刷新一次(例如)。当您从某些提要中获得足够的条目时 - 计算条目之间的平均间隔。然后使用该间隔作为获取该提要的间隔。
例如,如果网站在过去 7 天内发表了 7 篇文章 - 您可以每 24 小时(1 天)从该网站获取提要。
我在使用这个算法时做了一些改动,当我计算这个平均间隔时,我将它除以 2(确保不要太少获取)。如果结果小于 60 分钟 - 我将间隔设置为 1 小时,或者它大于 24 我将其设置为 24 小时。
例如,像这样:
public function updateRefreshInterval() {
$sql = 'select count(*) _count ' .
'from article ' .
'where created>adddate(now(), interval -7 day) and feed_id = ' . (int) $this->getId();
$array = Db::loadArray( $sql );
$count = $array[ '_count' ];
$interval = 7 * 24 * 60 * 60 / ( $count + 1 );
$interval = $interval / 2;
if( $interval < self::MIN_REFRESH_INTERVAL ) {
$interval = self::MIN_REFRESH_INTERVAL;
}
if( $interval > self::MAX_REFRESH_INTERVAL ) {
$interval = self::MAX_REFRESH_INTERVAL;
}
Db::execute( 'update feed set refresh_interval = ' . $interval . ' where id = ' . (int) $this->getId() );
}
表格是“feed”,“refreshed”是上次刷新 feed 的时间戳,“refresh_interval”是两次获取同一 feed 之间的所需时间间隔。
关于php - 优化提要获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332992/