【发布时间】:2011-03-01 23:59:11
【问题描述】:
我目前正在开发一个应用程序,该应用程序可以从赛车网站收集有关赛狗的信息,并对给定数据执行大量计算。当前的应用程序通过根据用户输入在赛车网站上执行单独的 YQL 请求来正确显示数据并执行正确的计算。
但是,我发现由于大量的 HTTP 调用和缺乏数据缓存,应用程序往往有点慢。为了加快速度并开放进一步分析数据的能力,我想构建某种系统,该系统将通过 cron 选项卡抓取和存储与前一天晚上相关的所有数据。但是,我不确定如何去做。
目前,应用程序经历了以下粗略的过程:
- 允许用户选择日期
- 执行 YQL 查询并遍历结果以获取该日期的所有比赛
- 允许用户从以上列表中选择种族
- 执行 YQL 查询并遍历结果以获取比赛中的所有狗
- 执行 YQL 查询并遍历结果以获取每只狗执行的所有比赛
- 根据每只狗的比赛计算统计数据
- 输出所有内容
如您所见,有很多单独的 HTTP 请求。这是不可避免的,因为每个数据集都存在于赛车网站的不同页面上。出于这个原因,我宁愿通过一个单独的系统来完成大部分处理,并将数据存储在数据库中,而不是在用户请求时收集和处理。
我可以轻松地从当前系统中提取提取和计算处理,然后让它们从 cron 选项卡中运行,但它们都将从单个 PHP 请求中运行。这意味着服务器将不得不遍历数以千计的数据,将每组数据存储在数据库中,所有这些都在一个 PHP 请求中。没试过,我会假设请求会超时?
所以总结一下,这是我的问题:
- 如果我将处理放入单个 PHP 文件并从 cron 运行它,它会在完成工作之前超时还是继续进行?
- 是否有任何预先存在的库可以处理此类任务?
- 对实现此目的的替代方法有什么想法吗?
非常感谢,
丹
【问题讨论】:
-
相关网站是否授权数据抓取?如果没有,您可能希望同时运行整个批次,这种事情会引起注意。
-
不,它没有。我还假设他们也不喜欢 YQL 被用来抓取他们的页面。如果我最终必须在后台处理全部内容,我想我将不得不在一天左右的时间内错开处理该项目以避免被注意到?