php - 优化提要获取

标签 php mysql cron feed fetch

我现在正在开发一个必须获取用户提要的网站。但是,如果我有一个数据库,比方说,有 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/

相关文章:

php - 当用户登录时检索并存储有关用户的其他信息

php - 将大字符串分成较小的 block 并计算每个 block 的php?

python - 为什么使用 icontains 过滤 django 区分大小写?

mysql - 安装后如何更改mysql sql模式

java - 一个月中倒数第二个星期的 Cron 表达式

php - file_put_contents 在 cron 作业中无法正常工作

php - 无法在 mysql 上插入 utf8 字符(使用 utf8 排序规则、字符集和名称集)

CSS 中的 PHP - "If page is in this directory, echo this"

php - 无法让 mysql_query 返回数据库中存在的任何值

amazon-web-services - 通过 msmtp 发送 Crontab 电子邮件 -> Amazon SES