Pular para o conteúdo principal

Desempenho com grandes conjuntos de dados

O Laravel Feeds grava os registros gradualmente. O uso de memória só permanece limitado quando todas as etapas anteriores continuam lazy.

Mantenha a consulta lazy

Retorne um Builder do Eloquent diretamente:

public function builder(): Builder
{
return Product::query()
->select(['id', 'title', 'updated_at'])
->where('is_exportable', true);
}

Não materialize o resultado completo antes da geração. Selecione apenas as colunas necessárias e carregue somente os relacionamentos usados por item() para evitar consultas N+1.

Ajuste o tamanho do lote

O padrão é 1000 registros. Valores menores reduzem o pico de memória dos modelos e aumentam as consultas. Valores maiores reduzem o custo das consultas e aumentam a memória. Meça com linhas próximas às de produção.

public function chunkSize(): int
{
return 500;
}

Divida os arquivos de saída

Use perFile() quando o consumidor aceitar vários arquivos ou quando uma saída única for difícil de publicar e repetir.

public function perFile(): int
{
return 50000;
}

Mantenha maxFiles() no valor padrão 0 quando todos os registros correspondentes precisarem ser exportados. Quando perFile() e maxFiles() forem maiores que zero, o Laravel Feeds exportará no máximo o produto desses valores e concluirá a geração com sucesso sem informar que os registros seguintes foram omitidos. Defina maxFiles() somente quando esse limite de registros for intencional.

Envie feeds longos para a fila

O modo de fila tira a geração do processo do console, mas não reduz a memória usada pelo feed. Use conexão assíncrona, workers com limites adequados e um TTL de unicidade maior que o tempo esperado de geração.

Meça todo o caminho

Meça separadamente banco de dados, hidratação dos modelos, transformação, serialização e publicação. Um disco remoto pode ser o maior custo mesmo quando a geração é rápida.

Veja também