steamulo / elastica-fast-populate-bundle
通过在消费者之间分配工作来提高FOSElasticaBundle中的fos:elastica:populate命令的性能。
1.0.2
2023-07-06 10:08 UTC
Requires
- php: ^7.4 || ^8.0
- enqueue/elastica-bundle: ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0
- symfony/process: ^4.4 || ^5.4 || ^6.0
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许可证发布。