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

Nic*_*iwi 13 database message-queue beanstalkd laravel laravel-5

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

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

在有关它的文档中没有真正的解释.

Arp*_*pit 18

使用数据库作为队列可以更简单地设置,并且可能更容易在开发机器上进行测试.但是在生产中将数据库作为队列运行可能不是一个好主意; 特别是在高流量情况下.虽然数据库可能不是排队的正确工具,但让我们看一下使用它的优缺点.

优点:

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

缺点:

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

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

  • 您是否在数据库类别中包含“ Redis”? (2认同)

Art*_*gio 5

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

场景:(Insert a new visitor tracking info (ip, city, state, country, lat, lng, user-agent, etc)要插入新条目,您需要确保IP过去 24 小时内没有访问过),因此它也有一个select查询。

(注意:表大小以百万为单位,实例为micro,只是为了看看最坏的情况是什么)

这是我得到的数字:

|--------------|----------|----------|
| Queue Driver |  TTFB    | Blocking |
|--------------|----------|----------|
| Sync         | 2.130sec | YES      |
| Database     | 0.430sec | NO       |
| AWS SQS      | 0.855sec | NO       |
|--------------|----------|----------|
Run Code Online (Sandbox Code Playgroud)
  1. 显然,这sync是最糟糕的选择,因为用户必须在那里坐 2.3 秒,然后才能开始接收任何数据。
  2. database具有最佳结果,但如前所述,可能不是高访问者数量的最佳解决方案。此外,你不应该忘记还有一个insert被制作到jobs桌子上。
  3. AWS SQS令我惊讶的是它比使用数据库慢。我猜这是因为database您已经在连接池中建立了与数据库的连接,但是每次SQS都必须建立TLS连接。因此,额外的 300-400 毫秒。

老实说,我认为这SQS并不难设置(只需按照指南进行操作)。我认为该决定取决于您的访客编号。