如果不知道表格模式,有点难以判断什么是最好的。如果许多用户会进行轮询,我会建议你在客户端进行过滤。我的意思是,如果与该作业相关的轮询时间少于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分钟之间。 - chris
算法仍然适用。你将不得不选择合适的timeout
。如果您选择1分钟,则客户端将获得更多不需要的数据(但会更快地意识到状态更改)。如果您选择8分钟,那么客户将获得不需要的数据(但最多8分钟后将意识到状态更改)。您将不得不根据软件要求选择合适的超时时间。这是一个权衡,就像计算中的一切。
我的意见:这是一个移动应用程序:不要每10秒下载50kb。当餐厅现在“开放”时,应用程序是否曾经告诉我?如果是这样的话,那么延迟8分钟就没关系。但是,如果作业是核反应堆的传感器,那么1分钟的延迟可能看起来很多:)
您可以添加“LastChangeTime”列,并只查询上次请求后已更新的作业。只是要小心从表中删除记录,因为客户永远不会看到它们已经消失。 – DCoder 2012-03-18 07:21:14