Laravel Queue,Beanstalkd vs Database,有什么区别?

时间:2015-06-28 04:43:01

标签: database laravel laravel-5 message-queue beanstalkd

使用Beanstalkd和队列的数据库驱动程序有很大区别吗?

有什么优点和缺点?数据库队列似乎更容易设置和运行,我应该知道如何使用它?

在文档中没有真正的解释。

3 个答案:

答案 0 :(得分:18)

将数据库用作队列可以更简单地设置,并且可能更容易在开发计算机上进行测试。但是在生产中将数据库作为队列运行可能不是一个好主意;特别是在高流量情况下。虽然数据库可能不是排队的正确工具,但让我们看一下专业人员和职业选手。这样使用它的好处。

优点:

  • 易于设置
  • 如果您使用相同的数据库,可能会减少应用程序中移动部件的数量

缺点:

  • 对于大量的读写操作,必须有一些锁定行和更新索引的机制等。
  • 投票工作人员还会锁定索引以便对其进行操作并使用作业的最终状态更新行。
  • 在这种情况下,对DB的写入可能会排队,执行时间会更长。

构建消息队列,例如SQS,Beanstalkd,RabbitMQ等,以处理这些场景。由于它们只关心存储和处理的消息,因此它们不必担心锁定和事务日志记录(数据库需要)。向系统添加消息传递队列将有助于它更容易扩展。此外,它还允许数据库通过允许它进行实际的事务处理而不必担心消息传递而进行呼吸。

答案 1 :(得分:2)

我在我的一台生产服务器上进行了一些测试。

方案: javafx.scene.control.Button (要插入新条目,您需要确保Insert a new visitor tracking info (ip, city, state, country, lat, lng, user-agent, etc)在过去24小时内没有访问过该条目,所以它也有一个IP查询。

(注意:表格大小以百万为单位,实例为select,只是为了查看最糟糕的情况)

以下是我得到的数字:

micro
  1. 显然,|--------------|----------|----------| | Queue Driver | TTFB | Blocking | |--------------|----------|----------| | Sync | 2.130sec | YES | | Database | 0.430sec | NO | | AWS SQS | 0.855sec | NO | |--------------|----------|----------| 是最糟糕的选择,因为用户在开始接收任何数据之前必须坐在那里2.3秒。
  2. sync效果最好,但如前所述,可能不是高访问者数量的最佳解决方案。此外,您不应该忘记database表格中仍有insert
  3. 令我惊讶的是,
  4. jobs比使用数据库慢。我猜测它是因为AWS SQS已经与连接池中的数据库建立了连接,但database每次都必须建立SQS连接。因此,额外的300-400ms。
  5. 老实说,我认为TLS很难设置(只需按照guide)。我认为该决定取决于您的访客号码。

答案 2 :(得分:-3)

CON Beanstalkd需要在服务器上设置和安装软件。自我托管。