2010-03-19 34 views
3

我正在为一家公司构建聊天系统,我想知道构建系统的最佳方式是什么?可扩展的基于PHP(基于AJAX)的聊天系统的最佳方法

当前的设置,我们拥有的是PHP和Memcacheq一个Nginx的HTTP服务器(作为附加聊天消息发送到用户自己的队列中的消息队列)。然后我们轮询Nginx服务器(通过Comet风格的请求)并查询消息队列的更新。

是否使用消息队列,如Memcacheq来处理既有用户到用户和站点范围内的聊天或者是它最好只是坚持MySQL的聊天系统是一个好主意?

谢谢!

回答

1

我期望Memcacheq能够比MySQL更好地执行。当你有几分陈旧的数据(或坏的数据库设计,增加查询执行时间)

3

Memcache的才有用。在你的情况下(聊天系统),数据将是新鲜的,添加Memcache只会使我看到的东西复杂化(读取性能降低)。将memcache看作mysql和php之间的中间件(在RAM上)。如果数据已过时,那么行程时间会减少,因为PHP不必去mysql,但在新数据的情况下,负载实际上会增加(因为memcache也需要从PHP获取更改)。

总之,我不会建议使用内存缓存的聊天系统。会推荐更多地搜索网页。好的帖子在http://blog.tech.stylefeeder.com/2008/08/22/memcached-vs-mysql/

+0

是否使用MemcacheQ而不仅仅是常规的Memcache设置有什么不同?我现在看看那个页面 - 谢谢! – Simon 2010-03-19 10:15:36

+0

据我所知,MemcacheQ只是提供排队功能的memcache的一个包装。不应该有任何区别。 – pinaki 2010-03-19 10:47:49

+0

如果发生聊天消息,请将其存储在mysql中并进行缓存。那么在阅读侧查询应该从chache读取值。 ? – 2012-01-09 18:32:56

1

Memcacheq是一个伟大的工具,它可以帮助避免网络requsts的延迟。 它可以充当php和mysql之间的缓冲区,但它不是mysql的替代品。 Memcacheq还可以使扩展更容易,因为可能会有多个分布式消息使用者。

我建议把它放在高负载的php请求之间,将数据保存到mysql并执行耗时的操作。这将加快用户的页面加载速度,并将免除您的Web服务器长时间的请求。

Memcacheq非常快。它不会花费太多资源的开发

+0

目前工作的方式是所有的聊天消息都存储在MySQL表中,但在发送消息的时候,关于数据库条目的信息被输入到特定的Memcache消息队列中并传送给用户几乎是实时的。这似乎是一种比持续轮询数据库更新更有效的方法。 感谢您的想法! – Simon 2010-03-19 23:48:19

0

试试这个:http://pushmodule.slact.net/。 Nginx会照顾到彗星的东西,你所有的php应用程序需要做的就是向模块发送HTTP请求。