【问题标题】:Most efficient way to know if a database table has been updated了解数据库表是否已更新的最有效方法
【发布时间】:2017-12-16 05:33:40
【问题描述】:

我想知道知道数据库表是否已更新的最有效方法是什么?我使用 Codeigniter 作为框架。 到目前为止,我考虑的方法是使用计时器并每 15-20 秒向后端发出一个 ajax 发布请求。但是,如果一个页面被闲置,那不会减慢网站的速度吗? 是否有其他方法可以做到这一点,或者这是唯一的方法。

【问题讨论】:

  • 术语不清楚,efficient 就实际情况(实时)/资源而言,例如CPU / 带宽?
  • 如果您只需要每 15-20 秒一次...发布请求应该足够好了...
  • 抱歉,对于最终用户来说资源效率很高。如果网站不断发出请求,页面最终会变慢吗?
  • 每 15-20 秒请求一次,并不重要,如果您正在使用 PHP,您还可以考虑使用长轮询,而不是 ping - 请求

标签: javascript jquery mysql database


【解决方案1】:

有几种技术可以做到这一点。

是的,您可以定期轮询以检查数据库上的任何更新日期,但其他几个解决方案旨在提供更一致、推送驱动的反应式更新检测。

对于 Javascript,我可以想到 MeteorJS:https://www.meteor.com/

MongoDB 提供 oplog 拖尾功能,用于实时监控数据库操作:https://www.mongodb.com/blog/post/tailing-mongodb-oplog-sharded-clusters,但这需要分片集群。

其他一些数据库引擎可能会提供在表格、行或文档上保持更新的功能。例如看看 RethinkDB(实时网络):https://www.rethinkdb.com

另一种处理更新的方法是使用消息传递(例如使用 nodejs/websockets 或 RabbitMQ、Kafka...),这样您就可以通知您的客户端连接的后端服务执行的任何更新。

实际上,理想的数据库更新检测实现起来有点困难,需要技术选择。

您必须决定是否要牺牲性能而不是复杂性。如果您希望许多用户对许多事情进行大量轮询,您可能希望围绕更一致的架构来组织您的项目。

【讨论】:

  • 感谢您的回答!我发现 Innodb 有一个函数可以检查表是否最近被修改过。如果可以的话,我会使用另一个框架。也许下一个版本。我想目前持续轮询将是唯一的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多