很少更新数据的策略

时间:2010-10-19 13:31:39

标签: php jquery ajax

背景: 在每小时前2分钟,服务器停止访问站点,返回繁忙的屏幕,同时处理前一小时收到的数据。这可以持续不到两分钟,在这种情况下,它会一直睡到两分钟。如果持续时间超过两分钟,则只要它需要返回就会运行。该块包含在一个自己的表中,该表中有一个字段和一个值。

目前,只有用户尝试执行操作时才会通知用户(单击链接,发送表单等)。我计划更新代码以自动通过BlockUI jquery插件关闭灯箱和阻止消息。

基本上有两种方法可以实现我的目标:

  1. 每N秒轮询一次(通过PeriodicalUpdater或类似方式)

  2. 长轮询(Comet)

  3. 通过检查本地时间以及何时接近实际时间开始轮询循环,可以减少1的服务器负载。通过将本地时间发送到返回差异模块60的服务器,这可以更准确。仍然有100多人查询服务器,这会导致数据库的额外命中。

    选项2是更具吸引力的选择。这消除了对Web服务器的重复命中,但并未完全重复检查数据库。然而,2不是像我们这样的apache 2.0跑者的选择,即使我们拥有我们的服务器,我们都不是网络管理员而且不想打破它 - 人们付出真正的钱玩,所以如果它没有打破解决它(因此为什么还在运行PHP4 / MySQL3)。

    由于选项2的问题,我们回到选项1 - 次优。

    所以我的问题实际上是双重的:

    1. 我错过了其他任何可能吗?

    2. 这种规模的长轮询确实是个问题吗?我知道它不会扩展,但我更担心它在什么程度上使Apache的线程匮乏。你也可以在Apache中调整任何选项,以便进一步扩展吗?

2 个答案:

答案 0 :(得分:2)

您是否可以在服务器开始处理前一小时收到的数据之前,向网页发送剩余的时间。可以说,在发送HTML时,您记录1分钟后服务器将开始处理。并创建一个将在1分钟后触发并将显示灯箱的JS。

答案 1 :(得分:-1)

我看到的替代方案是更快地完成它,因此从用户角度来看停机时间更短。为此,我将使用分布式系统来执行每小时更新后面的实际数据处理,例如Hadoop。然后使用最适合短暂停机时间的方法来更新页面。