【问题标题】:Optimize mysql/JS/php chat优化 mysql/JS/php 聊天
【发布时间】:2016-08-31 11:02:52
【问题描述】:

我做了这个 javascript/php/mysql,2 个用户,聊天。它每 3 秒请求(ajax)带有消息的 php 文件并更新页面。 php查询数据库:

SELECT * FROM tmessagges WHERE author='Jack' OR author='John'

我可以优化这个吗?

我认为优化的第一件事是在没有新消息时浪费所有请求,但我不确定是否值得...... 可能只选择 id 或计数,只有在有新消息时才发出第二个请求。

SELECT id FROM tmessagges WHERE author='Jack' OR author='John'

SELECT COUNT(id) FROM tmessagges WHERE author='Jack' OR author='John'

如果有新消息,则为第一个查询。

值得吗?因为cpu使用率和我想的差不多,只是流量少了……

或其他优化方式?

【问题讨论】:

  • 优化...如何?你想达到什么目的?减少滞后?更高的吞吐量?更少的数据库开销?每秒更多的操作?分辨率更高?卡路里更少?都不是?不止一种?
  • 我认为流量、服务器 CPU/内存、数据库流量。每 3 秒查询一次对我来说似乎很昂贵......我还没有在真实服务器上测试它,同时如果它可以优化......
  • 您可能会过早地尝试过度优化。如果遇到瓶颈,请获取一些数据。使用分析工具,例如 xhprof 或 xdebug 的分析模式。另一方面,确保您在数据库中有正确的索引,并且您的查询会很快:)。

标签: javascript php mysql optimization chat


【解决方案1】:

有一个与每条消息相关联的序列号,然后只要求“晚于”该编号的消息。

只需要查找一个“姓名”——可能是“消息 ID”,而不是“Jack”或“John”。

现在查询更短了:

SELECT * FROM Messages WHERE seq > 12345 AND msg_id = 199;

这通常只会返回某种“空”回复。当有消息时,它只会返回新消息,而不是对话的其余部分。

此外,不要通过网络发送 SQL。取而代之的是某种最小化流量的协议,例如

"new;12345;199"

【讨论】:

  • 好一个!双重优化!谢谢。 (我会稍等一下接受)
  • 问题:SELECT COUNT(id) FROM tmessagges WHERE author='Jack' OR author='John'SELECT id FROM tmessagges WHERE author='Jack' OR author='John' LIMIT 1 之间哪个更好(我认为这是你的建议)???两个查询都只返回一个数字,因此流量得到了优化。但是 COUNT 将浏览所有行,并且 LIMIT 1 否?还有一个 cpu 优化使用 LIMIT ???
  • 如果可能有多条消息,那么COUNT(id)(或简称COUNT(*))必须通过它们来计算它们;这比LIMIT 1(或EXISTS),需要找到一个,然后退出。
猜你喜欢
  • 2013-08-29
  • 2010-11-08
  • 2011-07-12
  • 2017-09-10
  • 2012-07-30
  • 1970-01-01
  • 2015-08-30
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多