使用PHP/MySQL对时间敏感的消息进行排队的最佳方法是什么?

使用PHP/MySQL对时间敏感的消息进行排队的最佳方法是什么?,php,mysql,message-queue,Php,Mysql,Message Queue,我正在一个新的应用程序中构建一个SMS呼叫和响应系统,该应用程序通过聚合器网关接收消息,检查其功能关键字(运行、停止、询问等),然后对其进行适当处理(保存到数据库,返回答案,或根据用户授权执行任务)。它目前运行良好,因为只有少数用户,但我认为随着我们的扩展,它会有更多的问题。我们目前正在一台DV机器上运行它(mediatemple-base-DV) 我的问题是:设置Memcached这样的东西来运行队列,或者设置一个运行守护进程的简单数据库来逐个处理每条消息,这更有意义吗?我在这两方面都没有太多

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

我的问题是:设置Memcached这样的东西来运行队列,或者设置一个运行守护进程的简单数据库来逐个处理每条消息,这更有意义吗?我在这两方面都没有太多经验,所以任何建议都会有帮助。既然消息传递有点时间敏感性,那么什么是处理此问题的最快和最可靠的方法

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

“最快”和“最可靠”不一定能很好地结合在一起:通常是一个或另一个

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


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

  • 若出现系统故障(如崩溃/重新启动),您将丢失memcached中的内容,而数据库将更易于恢复
  • 如果没有足够的RAM来存储数据,memcached将从缓存中删除一些旧项目,即使您没有要求
memcached在创建分布式缓存集群方面非常出色;但不应用于存储重要且您无法承受丢失的数据。

“最快”和“最可靠”不一定能很好地结合在一起:它们通常是一个或另一个

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


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

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

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

很有意义。所以,如果我使用一种简单的数据库方法,您会推荐什么?自动增加id并处理每次传递的最低id(然后删除)?这是可能的;您还可以使用时间戳列,并使用该列进行排序,而不是按自动增量排序(如果索引正确,我想不会有太大区别);;;此外,我不会在处理后删除行:相反,我会使用一个附加的“has_been_processed”列,并将其更新为1,以便指示行已被处理(这样,如果出现问题,我可以在一段时间后找到行,这可能很有用)。所以,如果我使用一种简单的数据库方法,您会推荐什么?自动增加id并处理每次传递的最低id(然后删除)?这是可能的;您还可以使用时间戳列,并使用该列进行排序,而不是按自动增量排序(如果索引正确,我想不会有太大区别);;;此外,我不会在处理后删除行:相反,我会使用附加的“has_before_processed”列,并将其更新为1,以便指示行已处理(这样,如果出现问题,我可以在一段时间后找到行,这可能很有用).您的应用程序中当前的瓶颈是什么?您的应用程序中当前的瓶颈是什么?