2010-11-18 70 views
0

我有一个使用MySQL的网站。我使用一个名为“People”的表,每行代表显然是一个人。当用户进入一个页面时,我想介绍与该人相关的新闻(以及来自MySQL表格的信息)。为此,我决定使用BING新闻源API。获取多个URL并使用PHP脚本更新数据库

调用每个页面加载的BING API的方法的问题是,我正在增加我的页面的加载时间(对于BING服务器的四舍五入)。因此,我决定预先取得所有新闻并将其保存在名为“新闻”的彩色表中。

由于我的表格包含5,000多人,因此运行PHP脚本为每个人下载所有消息并立即更新表格,结果为Fatal error: Maximum execution time(我不想禁用超时,因为这是一个很好的安全措施) 。

运行这样一个脚本的好方法是什么?我知道我可以每5分钟运行一次cron作业,每次只更新一部分行,但即使在这种情况下,保存当前偏移量的最佳方法是什么?我应该保存在MySQL中的偏移量,还是作为服务器var?

回答

1
  • 使用的cronjob复杂的工作
  • 如果您打算为的cronjob运行,你应该增加超时(你是从其他网站拉东西,不是为了公共)
  • 考虑创建一个主脚本(通过触发cronjob),并且这个主脚本会产生多个子脚本(有一定的控制权),这样你就可以从BING新闻源(从中可以多次下载5000多个配置文件)中提取数据,而无需一一下载,一个按顺序(想批处理)

更新

Cron是Unix类计算机操作系统中基于时间的作业调度程序。名字c​​ron来自“chronos”一词,希腊语来自“时间”。 Cron使用户能够安排作业(命令或shell脚本)在特定时间或日期定期运行。它通常用于自动化系统维护或管理,尽管它的通用性意味着它可以被用于其他目的,例如连接到互联网并下载电子邮件

Cron - on Wiki

+0

谢谢!是否有可能只增加这些脚本的超时时间,而所有其他的PHP都会有默认的超时时间? – Joel 2010-11-18 09:51:36

+0

Spawn php程序不是指include或require,而是直接调用PHP来运行脚本。含义每个产卵过程都使用他们自己的默认超时。请参考这里:http://stackoverflow.com/questions/45953/php-execute-a-background-process – ajreal 2010-11-18 09:56:57

+0

哦,好的抱歉。我知道了。你的建议不要通过Apache(它具有超时限制)将其作为脚本运行,而是作为Linux中的PHP进程运行。谢谢! – Joel 2010-11-18 10:04:55

1

为什么不通过AJAX加载页面的新闻部分?这意味着页面的其余部分会很快加载,并且等待BING所产生的延迟只会影响新闻部分,您可以分配一个加载占位符。

将数据存储在数据库中听起来不像是非常高效/实用的解决方案,单独对记录进行持续管理可能会导致未来头痛。

+0

晴SEO的原因。我认为SE蜘蛛可能会忽略这种内容...... – Joel 2010-11-18 09:49:58

+0

嗯,是的,你需要迎合这一点。也就是说,如果你的AJAX调用结构正确,它应该没问题。看到这里(谷歌):http://code.google.com/web/ajaxcrawling/docs/getting-started.html – SW4 2010-11-18 09:53:29

+0

@joel ..只有当用户登录正确时才显示新闻?那么Wats在索引新闻项目的搜索引擎中的重点呢? – Shoban 2010-11-18 09:55:01