我正在使用推送服务(http://pusher.com)构建一个聊天小部件,我需要将用户发送的所有消息保存到数据库中,以便在一段时间后可以访问它。我正在使用 mysql 数据库,我想到的唯一方法是每次触发聊天消息事件时都进行新的插入,但恐怕它不会像应有的那样快。
在这种情况下,您希望使用哪些数据库和技术来保存聊天消息?
您可以采取的一种方法是使用 MySQL 的INSERT DELAYED
. 执行此操作时,客户端不必等待插入完成。相反,服务器将对插入进行排队并尽可能执行它们。因此,处理聊天的进程/线程将不必等待它们。但是您仍然可以将聊天记录存储在可以检索的数据库中。假设您正在使用推送器在“实时”消息进入时共享它们,因此不需要立即访问聊天历史记录,这可能对您有用。
除非您打算创建一个包含数千人的聊天系统,否则我相当确定结构合理的 mysql 解决方案可以毫无问题地处理这个问题。在我工作的地方,我们有一个基于 php 和 mysql 的 Intranet 聊天解决方案,它运行完美(对于我们约 100 人的中型团队)。
我确实有一个建议是确保您了解 mysql 索引。确保您的聊天系统真正充分利用索引。您可以通过这种方式大大提高性能。
如果并发真的成为你的问题,我听说很多人对 node.js 有很好的体验。但是,如果您对 php 和 mysql 感到满意,我会说先走那条路。
快乐编码!
(我知道这很旧,但是)这里有一个有趣的演示(尽管在 Rails 中),它可以满足您的要求。它包括一个可能的模式。 https://github.com/dipth/pusher_demo