自上次查询MySQL以来检索差异数据

时间:2012-03-18 07:05:01

标签: php mysql mobile

我正在构建一个移动应用程序,每隔10秒轮询数据库以打开作业($ .getJSON)。查询结果可能很重(大约50kb JSON),所以我正在寻找减轻它的方法。我假设有一种方法只能从数据库中检索更改,但我无法绕过它。

目前,在PHP部分我只是做SELECT * FROM table WHERE status = 'open'。乔布斯将保持开放约5分钟,所以在那段时间我无用地获得了我已经拥有的大量数据。我需要检索的只是新工作(自我上次查询以来添加)以及可能同时关闭的工作,以便我可以从列表中删除它们。

有没有实用的方法来执行此操作?也许在PHP方面?

谢谢!

1 个答案:

答案 0 :(得分:0)

在不了解您的表架构的情况下,告诉什么是最好的有点困难。如果许多用户将进行该轮询,我建议您在客户端进行过滤。我的意思是,跟踪从查询中获得的每个打开的作业,如果与该作业关联的轮询时间少于5分钟,则从查询中过滤掉它们。一旦与该工作相关的投票时间超过5分钟,请再次询问。

例如,如果您查询服务器并打开作业1,2和3,请为每个作业关联一个时间值(它将是相同的)。

下次查询服务器时(在这种情况下10秒后),请确保过滤掉那些不到5分钟的作业:

select * from table
where status = 'open' and jobid not in (1, 2, 3)

一旦通过5分钟,您应该从not in条款中删除这些工作ID。

请注意,此解决方案会将工作留给客户端,并且不需要任何数据库架构修改。

修改

  

有趣,但工作的开放时间平均为5分钟,通常为1到8分钟。 - 克里斯

该算法仍然适用。您必须选择合适的timeout。如果您选择1分钟,那么客户端将获得更频繁的不需要的数据(但会更快地了解状态变化)。如果您选择8分钟,那么客户将获得较少的不需要的数据(但最多会在8分钟后知道状态变化)。您必须根据软件要求选择适当的超时。作为计算中的一切,这是一种权衡。

我的观点:这是一个移动应用程序:不要每10秒下载50kb。应用程序是否用于告诉我餐厅现在何时“开放”?如果是这种情况,那么如果你有8分钟的延迟就可以了。但是,如果工作是核反应堆的传感器,那么延迟1分钟可能看起来很多:)