steamulo/elastica-fast-populate-bundle

通过在消费者之间分配工作来提高FOSElasticaBundle中的fos:elastica:populate命令的性能。

1.0.2 2023-07-06 10:08 UTC

This package is auto-updated.

Last update: 2024-09-06 12:41:46 UTC


README

通过在消费者之间分配工作来提高FOSElasticaBundle中的fos:elastica:populate命令的性能。

此包基于Enqueue Elastica Bundle,并提供了使用一组子进程自动管理“populate”的命令。性能提升取决于您运行的消费者数量。例如,10个消费者可能会提供5到7倍的性能提升。

安装

安装此包时,将自动安装Enqueue ElasticaBundle。然后必须配置它,以指示子进程将如何进行通信。

默认enqueue.yaml

enqueue:
    default:
        transport:
            dsn: '%env(resolve:ENQUEUE_DSN)%'
        client: ~
enqueue_elastica:
    transport: '%enqueue.default_transport%'
    doctrine: ~

注意:如果您正在使用Symfony Flex,则已完成。如果不使用,则必须做一些额外的事情,例如在您的AppKernel类中注册该包。

用法

  • 运行populate命令并指定一些消费者(运行的越多,您可能获得更好的性能)
php bin/console stm:fast-populate:populate --nb-subprocess=6

自定义

命令选项

要限制子进程的内存消耗,您可以使用不同的参数

  • message-limit - 整数。消费n条消息并退出。
  • time-limit - 整数。在此时间内消费消息。
  • memory-limit - 整数。在达到此内存限制(MB)之前消费消息。

您还可以使用经典的populate选项:PopulateCommand.php

例如,要将内存消耗限制为800MB,并为8个子进程处理每页1000个元素,您可以按以下方式运行命令

php bin/console app:elastica:populate --memory-limit=800 --max-per-page=1000 --nb-subprocess=8

自定义消费者

QueuePagerPersister可以通过选项进行自定义。例如,可以在订阅了FOS\ElasticaBundle\Persister\Event\PrePersistEvent事件的监听器中自定义这些选项。

以下是可用的选项列表

  • max_per_page - 整数。告诉单个工作器一次应该处理多少个对象。
  • first_page - 整数。告诉从哪一页开始重建索引。
  • last_page - 整数。告诉在哪个页面上停止重建索引。
  • populate_queue - 字符串。这是一个populate队列的名称。工作器应从中消费消息。
  • populate_reply_queue - 字符串。这是一个回复队列的名称。命令应从中消费回复。如果未设置,持久化器尝试创建一个临时队列。
  • reply_receive_timeout - 浮点数。消费者等待消息的时间。以毫秒为单位。
  • limit_overall_reply_time - 整数。限制允许的处理时间。如果超过此时间,则抛出异常。

许可证

它根据MIT许可证发布。