我目前正在构建一个用户面板,它将使用 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/