【问题标题】:Whats the best method for queuing time-sensitive messages with PHP/MySQL?使用 PHP/MySQL 对时间敏感的消息进行排队的最佳方法是什么?
【发布时间】:2011-01-30 05:05:33
【问题描述】:

我正在一个新应用程序中构建一个 SMS 呼叫和响应系统,该应用程序通过聚合网关接收消息,检查它的功能关键字(运行、停止、询问等),然后适当地处理它(保存到数据库,返回答案,或根据用户授权执行任务)。目前它运行良好,因为只有少数用户,但我认为随着我们扩大规模,它会遇到更多问题。我们目前在一台 DV 机器上运行它(mediatemple base dv)。

我的问题是:设置 Memcached 之类的东西来运行队列,或者设置一个运行守护进程的简单数据库来逐条处理每条消息是否更有意义?我没有太多经验,所以任何建议都会有所帮助。由于消息传递在一定程度上具有时间敏感性,那么最快、最可靠的处理方式是什么?

另外,由于我们正在发送响应,我可能还需要设置和出站消息队列。对两者使用相同的概念是否有意义?

【问题讨论】:

  • 您的应用程序当前的瓶颈是什么?

标签: php mysql message-queue


【解决方案1】:

“最快”和“最可靠”不一定能很好地结合在一起:通常是两者之一。

关于 memcached 和数据库,您必须知道 memcached 是一种缓存机制,而不是数据存储机制。


这意味着它不应该用于存储您无法重新生成的数据:

  • 如果出现系统故障(如崩溃/重启),您将丢失 memcached 中的内容——而数据库更能够恢复
  • 如果没有足够的 RAM 来存储数据,memcached 会从缓存中删除一些旧项目,即使您没有要求它

memcached 非常适合创建分布式缓存集群;但不应用于存储重要且您不能丢失的数据。

【讨论】:

  • 有道理。因此,如果我要使用简单的数据库方法,您会推荐什么?每次通过时自动增加 id 并处理最低的 id(然后删除)?
  • 这是可能的;您还可以使用时间戳列,并使用该列进行排序,而不是按自动增量排序 (我想,如果索引正确,不会有太大区别) ;;;另外,一旦处理,我不会删除行:相反,我会使用附加的“has_been_processed”列,并将其更新为1,因此表明该行已被处理(这样,如果出现问题,我可以在一段时间后找到行,这可能很有用).
猜你喜欢
  • 2011-01-27
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多