我的核心是一个php / mysql应用程序。每隔约15分钟将新数据添加到数据库中。我想通知用户新数据在数据库中。 我想在客户端计算机上运行一些JS以每60秒检查一次更新,但我不想下拉结果,除非在DB中实际更改/添加了某些内容。
所以我的问题是:使用PHP / JS / MYSQL客户端检测数据库中新行的最佳方法是什么?
我正在解决的一个可能的解决方案是使用名为“switch”的单独表格,其中BOOL称为“switch”,每次我将DB设置“switch”更新为true 60秒。然后客户端计算机每60秒检查一次switch.switch ='1'(真)。 思考?我对这个计划的任何部分都有建议吗?如果有人想提出jQuery建议,我确实加载了jQuery库...
答案 0 :(得分:7)
不要将“switch”作为标志,而是将其作为版本号。在数据库中放入新内容时增加数字。然后客户只是将他们的号码与他们定期获取的号码进行比较,当数字不同时,他们知道是时候进行更新。 (显然他们记得下一次测试的新号码......)
答案 1 :(得分:5)
我会考虑在表格中使用时间戳或日期/时间字段与布尔值。客户端可以将他们最后检查的时间(最好使用服务器时间)与表中的内容进行比较。如果基于表的日期/时间比客户端提供的更新数据,则发送回更新的数据。
答案 2 :(得分:1)
更新/版本号(更新时间或增加的整数)是要走的路。我在我的应用程序中执行此操作。
一些提示:
1使用memcache而不是将数据存储在dbms中。降低dbms的负载,并加快对查询的响应。
2是否只有一组数据每15分钟更新一次?如果是这样,则缓存键可以是简单的“data_ver”如果存在多组数据,每个数据集都有自己的更新周期,则将data_set编号作为键的一部分包括在内。例如data__ver或data_1_ver,data_2_ver等
3而不是让客户端猜测数据加载是否已经完成(您建议在评论中等待60秒),对于数据加载过程来说,表示 更好<它已经完成了。 - 完成后,版本将更新。
4保存版本日期/时间而非简单数字的一个优点是,它使您能够向“2010年1月1日上午11:12美国东部时间更新的数据”的用户添加状态消息。请记住处理时区问题 - 您的客户可能与服务器不在同一时区。它们可以是服务器的东部或西部。
5如果您想在客户端等待更改后“安定下来”的事情,那么您可以在浏览器上启动本地计时器。您无需担心在浏览器和服务器之间同步时钟。在更新号码更改后等待60秒,然后再下载新数据。
6如果您拥有大量客户端并且数据下载的大小合适,那么您应该考虑在版本更改后和请求下载之前在客户端上包含0-90秒左右的随机延迟。否则,您最终可能会尝试同时下载更新数据的所有客户端。
答案 3 :(得分:0)
我喜欢你的一行表,但是会有lastupdate的时间戳,只有在批量更新发生后才能更新。
如果客户端在更新期间读取数据,是否会出现问题?
答案 4 :(得分:0)
你能用PHP维护一个标志,让你的客户每隔60分钟提交一次并检查标志吗?
答案 5 :(得分:0)
如果您可以为每个用户设置上次更新的时间戳,并设置一个触发器,以便在完成与该用户相对应的所有更改后更改其时间戳。然后,您可以使用jQuery检查其当前时间表是否与其用户的上次更新的时间戳匹配。
答案 6 :(得分:0)
我建议在AFTER模式下使用MySQL triggers将条目插入到具有版本ID自动增量或类似功能的单独表中。最后一个版本ID可以存储为URL / Cookie或您正在使用的任何机制,并与触发器生成的最新版本进行比较。