Перайсці да асноўнага змесціва
Версія: 1.x

Прадукцыйнасць на вялікіх наборах даных

Laravel Feeds запісвае даныя паступова. Памяць застаецца абмежаванай толькі тады, калі кожны папярэдні крок праграмы застаецца лянівым.

Пакідайце запыт лянівым​

Вяртайце Builder Eloquent непасрэдна:

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

Не матэрыялізуйце ўвесь вынік перад генерацыяй. Выбірайце толькі патрэбныя слупкі і загадзя загружайце толькі сувязі, якія выкарыстоўвае item(), каб пазбегнуць запытаў N+1.

Наладжвайце памер блока​

Стандартнае значэнне — 1000 запісаў. Меншыя значэнні зніжаюць максімальны расход памяці мадэлямі і павялічваюць колькасць запытаў. Большыя значэнні памяншаюць накладныя выдаткі запытаў і павялічваюць расход памяці. Вымярайце з памерамі радкоў, блізкімі да вытворчых.

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

Падзяляйце выходныя файлы​

Выкарыстоўвайце perFile(), калі спажывец прымае некалькі файлаў або адзін вывад становіцца складана публікаваць і паўтараць.

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

Пакідайце для maxFiles() стандартнае значэнне 0, калі трэба экспартаваць усе прыдатныя запісы. Калі perFile() і maxFiles() большыя за нуль, Laravel Feeds экспартуе не больш за іх здабытак і паспяхова завяршае працу, не паведамляючы, што наступныя запісы былі прапушчаныя. Задавайце maxFiles() толькі тады, калі такое абмежаванне колькасці запісаў наўмыснае.

Адпраўляйце доўгія стужкі ў чаргу​

Рэжым чаргі выносіць генерацыю з кансольнай каманды, але не памяншае памяць, патрэбную стужцы. Выкарыстоўвайце асінхроннае падключэнне, запускайце апрацоўшчыкі з адпаведнымі абмежаваннямі часу і памяці і задавайце TTL унікальнасці большым за чаканы час генерацыі.

Вымярайце ўвесь шлях​

Асобна вымярайце час базы даных, стварэння мадэляў, пераўтварэння, серыялізацыі і публікацыі ў сховішча. Аддалены дыск можа стаць асноўным выдаткам нават пры хуткай генерацыі.

Глядзіце таксама​