за быстро около 30 секунд и с минимальным использованием памяти?
Пока варианты такие:
-Библиотека maatwebsite/excel и через chunk, чтобы экономить память
- Библиотека rap2hpoutre/fast-excel, там выделение памяти вроде на много меньше и быстрее работает
Посмотри xlsx_write
https://github.com/mk-j/PHP_XLSXWriter
Так там запись в файл, а мне нужно прочитать файл и записать в БД 😞
Тогда посмотри в сторону Laravel Excel
Ещё смотрю в сторону конвертировать в csv и через load data
Конвертация в csv через Php займет много памяти
конвертировать внешней приблудой типа как тут советуют https://stackoverflow.com/questions/10557360/convert-xlsx-to-csv-in-linux-with-command-line и потом сделать load data прямо в БД
наврядли за 30 секунд получится. даже считать за такое время нереально.
Взять в аренду 1сек супер компьютера
Я вот ваще не понимаю как отвечать на такое, типа 20к строк а в нём 1 столбец с инкрементом и он выполняется 2ч потому что сервер 🥔?
https://github.com/AsperaGmbH/xlsx-reader тут можно фиксануть вроде как память, после чего будет ФС использоваться
У меня на локалке и миллион строк инсертится за 20 сек или каждая строка паралельно ещё 500 апи обращений делает
Очень сложно, ну хз, создай 500 воркеров или чё надо?
Так, а воркер что память не занимает?
как вы этого достигли?
Купил несколько клубней картофеля и поливал водой
я серьезно хотел бы узнать как организовать вставку при помощи воркеров одновременно и еще учитывать время потраченно на обращение к api. доп инструменты используются или на чисто laravel?
Фантазией
Речь шла не про Эксель
Ларавеля хватит, воркеры есть, время учитывать всего не делал, можно например только апи замерять
у меня задача просто есть. на отдельном серваке запускать сервис который бы считал данные о порядка 60 000 цен товаров где будет только id и цена в итоге. и потом эти данные синхронизировать с другой базой данных с таблицей product_prices чтоб не по одной записи апдейтить а пачками. при этом если в таблице есть такой id товара чтоб цена просто апдейтилась а если нет такого id товара чтоб создавалась запись. вот ищу подход как это сделать. и желательно при помощи большого числа воркеров когда на входе имеем только массив id и цен. либо в редис их собрать сначала а потом как то в mysql передать.
60k строк это вообще ни о чем🤷♂ можно разбить на чанки по 5к строк и в очередь загнать, вряд ли будет дольше минуты работать
В ларе же есть upsert
ооо. вот как! а когда я начинал работать с ларавел такой функции еще небыло. и приходиолсь с гита выкачивать стороннюю либу которая помогала такое реализовывать
30 сек это очень много времени
ну я отталкивался из своего опыта. что на считывание данных из экселя при помощи обычных php либ требуется время. Либо память.
там не php используется .. зачем конвертить файл через php? если на уровне системы это будет явно быстрее .. аналогично потом быстрее запихнуть csv через тулзу БД чем делать это через пыху ..
а как забрать данные из экселя при помощи ядра линукс ?
Обсуждают сегодня