使用memcached作为聊天消息的数据库缓冲区

Jen*_*and 6 php database memcached buffer chat

我正在使用PHP和CodeIgniter构建聊天应用程序.

为此,我正在使用memcached实现缓存"缓冲区",以便将最新的聊天消息保存在内存中,从而减少数据库的负载.我想要做的是:

  1. 当消息到达时,我使用当前分钟(YYYY-MM-DD-HH-MM)作为密钥将其保存在memcached中.没有涉及数据库I/O. 这个想法是来自同一分钟的所有消息都在同一个密钥下收集.
  2. 用户收到也从memcached获取的新聊天消息(现在我正在使用长轮询,但由于性能明显原因,这将转移到Node.js下的WebSockets).同样,没有涉及数据库I/O.
  3. 自动服务器脚本(cronjob)将每5分钟运行一次,从最近5分钟收集memcached数据并将消息插入数据库.
  4. memcached对象设置为在6分钟后过时,因此我们永远不需要在内存中保留超过6分钟的消息数据

这对于每5分钟总共一次数据库写操作和零数据库读操作.

这听起来可行吗?有没有更好的(甚至可能是内置的?)方法来为此目的使用memcached?


更新:我现在已经尝试了一点,我有一个快捷方式的想法(阅读:hack).我可以在Node.js服务器脚本中临时"缓冲"消息,直到我准备好存储它们.Node.js服务器中的Javascript对象/消息数组基本上是一个内存缓存 - 有点像.

所以:每N个消息/秒,我可以使用我想要的任何方法将缓冲的消息(JS数组的内容)传递给我的数据库,因为它不会经常被调用.

但是,我担心这可能会破坏Node.js服务器进程,因为它可能不会喜欢携带那个200 KB的数组.

对这个策略的任何想法?它完全疯了吗?

dyn*_*mic 2

为什么不使用INSERT DELAYED?它为您提供几乎与您想要实现的功能相同的功能,而无需内存缓存。

不管怎样,你的解决方案看起来也不错。