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

Php 从MySQL检索自上次查询以来的差异数据,php,mysql,mobile,Php,Mysql,Mobile,我正在构建一个移动应用程序,它每10秒轮询一次数据库以查找打开的作业($.getJSON)。查询结果可能非常繁重(大约50kb JSON),因此我正在寻找减轻它的方法。我假设有一种方法可以只从数据库中检索更改,但我不能对此束手无策 目前,在PHP部分中,我只需执行一个SELECT*FROM表,其中status='open'。工作将持续5分钟左右,所以在这段时间里,我毫无用处地获取了我已经拥有的大量数据。取而代之,我需要检索的只是新作业(自上次查询以来添加的作业)以及可能同时关闭的作业,以便我可以

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

目前,在PHP部分中,我只需执行一个
SELECT*FROM表,其中status='open'
。工作将持续5分钟左右,所以在这段时间里,我毫无用处地获取了我已经拥有的大量数据。取而代之,我需要检索的只是新作业(自上次查询以来添加的作业)以及可能同时关闭的作业,以便我可以将它们从列表中删除

有什么切实可行的方法来实现这一点吗?也许在PHP方面


谢谢

如果不知道您的表模式,就很难判断什么是最好的。如果有很多用户会进行这种轮询,我建议您在客户端进行过滤。我的意思是,跟踪从查询中获得的每个打开的作业,如果与该作业相关联的轮询时间少于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分钟之间克里斯

算法仍然适用。您必须选择适当的
超时时间
。如果选择1分钟,则客户端将更频繁地获取不需要的数据(但会更快地意识到状态更改)。如果您选择8分钟,那么客户将不太频繁地获得不需要的数据(但最多8分钟后会意识到状态更改)。您必须根据软件要求选择适当的超时时间。这是一种权衡,就像计算机中的一切一样


我的观点:这是一个移动应用程序:不要每10秒下载50kb。该应用程序是否用于告诉我餐厅何时“营业”?如果是这样的话,那么你可以延迟8分钟。但是,如果作业是核反应堆的传感器,那么1分钟的延迟可能会很大:)

您可以添加一个
LastChangeTime
列,只查询上次请求后更新的作业。只是要小心从表中实际删除记录,因为这样客户将永远看不到它们消失。有趣的是,作业的打开时间平均为5分钟,通常在1到8分钟之间。我在回答中回答了您的评论