Экспорт большого объёма данных. Express советы

preview_player
Показать описание
Сегодня мы с вами поговорим про генераторы. Классическая проблема, классическая боль для большинства новичков. У нас есть итерация по огромному количеству элементов, плюс с каждым мы производим определенные действия и в итоге уходим в лимит памяти. Давайте посмотрим что с этим можно сделать.

#Expressсоветы#laravel#cutcode
---------------------------------------------------------------------------------
🚀📹👨‍🏫 Как насчет прокачки своих навыков с помощью наших обучающих видеокурсов по web-разработке? Переходи на мой сайт 👇

---------------------------------------------------------------------------------
📹 делитесь этим видео с друзьями:

📼 Курс по Laravel с нуля:

Экспорт большого объёма данных. Express советы

---------------------------------------------------------------------------------
Рекомендации по теме
Комментарии
Автор

Отличный совет, полезный, спасибо. Смотрю все ваши видео, любой длины 😊

undersun
Автор

Быть. Да. Можно даже в плейлист какой-то выделить такое ролики.

АртёмИвасечкин
Автор

На мой взгляд нужно углублять в детали реализации, чтобы понимать, что ларавель делает под капотом метода cursor

Kyrare
Автор

Рублрика нужна, Лайк ставлю)) подписку и колокольчик :D

andreigolovaciuc
Автор

в некоторых случаях вот действительно не хватает наглядного примера решения, вроде и все понятно что пишут как решается но делаешь как пишут не всегда работает из за особенностей компонентов и версий 😂

gamingplay
Автор

По архитектуре интересно бы были задачки и решения. Как из лапшекода делать чистый

Pavelbrov
Автор

Количество использованной памяти уменьшили, но мы так сильно увеличили нагрузку на БД. На каждую запись по 1 запросу - это более 70000 запросов. В некоторых фреймворках есть решение из коробки (Yii2 методы each(), batch() для query билдера). Например: foreach ($queryModels->each(1000) as $model), где 1000 - это количество моделей в одном запросе. Так мы не сильно загружаем БД, и остаёмся в рамках лимита памяти

СергейПономарёв-ъю
Автор

А если применить LazyCollections? Тоже под капотом генератор

deniskadet
Автор

Вот именно из таких частных случаев и строттся опыт;] когда кипишь над задачей день-другой, и потом осенило.. Рубрика "я понял/всё просто/хозяйке на заметку..." даст буст в просмотрах. Другой момент идеологический - ..я кодил, а кто-то получил скил даром.

Hairypro
Автор

Если курсор из базы берет по одной записи, то это не эффективно. Лучше использовать ларавелевский batch. Причем стоит посчитать количество памяти на пачку, чтобы брать по максимому, так будет меньше запросов в базу. Если нужно сортировать или аггрегации по всей таблице делать, то это точно быстрее будет.
Ещё есть такая фишка, что при softDelete можно добавить индекс с сортировкой по id (или другому молю, по которому сортируется) и в индексе задать условие deleted_at is null или наоборот, если записи удаляются редко, так инварианты отбрасываются + всё заранее отсортировано и уже не всю таблицу приходится сканить.
А я пока почитаю про то как работает курсор.

vesh
Автор

эх... жаль нет полного примера. а если записей 200.000? как поведет система?

AlexandrMakovkin
Автор

лимит офсет, решают проблему. Генератор не нужен, курсов в принцепе тоже. если только бд на лярд строк

inilim