Перейти до основного вмісту
Версія: 1.x

Швидкодія на великих наборах даних

Laravel Feeds призначений для поступового запису даних. Використання пам'яті залишається обмеженим, лише коли застосунок зберігає кожен попередній крок ледачим.

Зберігайте запит ледачим​

Повертайте побудовник Eloquent Builder безпосередньо:

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() лише для навмисного обмеження кількості записів.

Передавайте тривалі фіди до черги​

Режим черги виносить генерування з консольного запиту, але не зменшує обсяг пам'яті, який використовує фід. Використовуйте асинхронне підключення, запускайте обробники з належними обмеженнями часу та пам'яті й задавайте час дії блокування унікальності довшим за очікуваний час генерування.

Вимірюйте весь шлях​

Окремо вимірюйте час роботи бази даних, створення моделей, перетворення, серіалізації та публікації у сховищі. Для віддалених дисків публікація може стати основною витратою, навіть коли саме генерування швидке.

Дивіться також​