php - 如何让基于 curl 的 URL 监控服务轻量级运行?

标签 php mysql performance curl cron

我目前正在构建一个用户面板,它将使用 curl 抓取日常信息。对于每个 URL,它将向数据库INSERT 一个新行。每个用户都可以添加多个 URL 进行抓取。例如:数据库可能包含 1,000 个用户,每个用户可能平均有 5 个 URL 需要抓取。

我如何运行 curl 抓取 - 通过 cron 作业每天在特定时间执行一次?单个专用服务器可以毫无延迟地承受这种情况吗?有没有什么技术可以减少服务器负载?关于 MySQL 数据库:每天有 5,000 个新行,一个月后数据库将变得庞大。

如果你想知道我正在构建一个统计服务,它将显示他们页面的每日增长(不谈论流量),那么据我所知,我需要每天为每个用户插入一个新值。

如有任何建议,我们将不胜感激。

最佳答案

5000 x 365 只有 180 万……数据库不用担心。如果你愿意,你可以把数据塞进 mongodb(需要 64 位操作系统)。这将允许您在需要时更轻松地扩展和转移负载到多台机器。

如果你想不停地运行 curl 直到它从 cron 完成,只需“nice”这个过程,这样它就不会使用太多的系统资源。否则,您可以运行一个脚本,该脚本在每次 curl 拉动之间休眠几秒钟。如果每次抓取需要 2 秒,那么您每 24 周期可以抓取 43,200 页。如果您在 2 秒拉动之间睡 4 秒,那么您每天可以完成 14,400 页(5k 是 14.4k 的 40%,因此您应该在半天之内完成,在 2 秒抓取之间睡 4 秒)。

第一年,至少在前 6 个月,这在最小的 VPS 机器上似乎非常可行。然后,您可以考虑使用更多机器。

(编辑:另外,如果您担心空间不足,可以存储二进制 GZIPPED 抓取的页面源)

关于php - 如何让基于 curl 的 URL 监控服务轻量级运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6441266/

相关文章:

php - 从 mysql 插入 html 代码图像和 href

php - 为什么在 require_once 中包含 __DIR__?

php - 如何告诉用户数据库中没有用户输入的特定日期的数据

mysql - mysql连接三个表

c# - 不变性对非并行应用程序有用吗?

performance - 无序集(const char)比无序集(字符串)慢得多

c# - StreamReader 和 StreamWriter 的性能问题

php - getUrlRules - 切换到 Controller

php - 如何使用 PHP 函数调用在 DIV 上执行的函数?

php - POS 的离线数据库支持