Ако мислите да създадете заявка като UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000
или WHERE id IN (1, 2, 3, ..., 50000)
тогава това вероятно ще бъде твърде голямо. Ако можете да направите някаква логика, за да обобщите това, това ще съкрати заявката и ще ускори значително нещата в края на MySQL. Може би бихте могли да го направите WHERE id >= 1 AND id <= 50000
.
Ако това не е опция, можете да го направите на серии. Вероятно ще преминете през редовете на CSV файла, ще изградите заявката като голям WHERE id = 1 OR id = 2...
заявка и на всеки около 100 реда (или 50, ако това все още е твърде голямо), стартирайте заявката и стартирайте нова за следващите 50 идентификатора.
Или можете просто да стартирате 50 000 единични UPDATE
заявки във вашата база данни. Честно казано, ако таблицата използва правилно индексите, изпълнението на 50 000 заявки трябва да отнеме само няколко секунди на повечето съвременни уеб сървъри. Дори и най-натоварените сървъри трябва да могат да се справят с това за по-малко от минута.
Що се отнася до четенето на файл на парчета, можете да използвате основните функции на PHP за достъп до файлове за това:
$file = fopen('/path/to/file.csv', 'r');
// read one line at a time from the file (fgets reads up to the
// next newline character if you don't provide a number of bytes)
while (!feof($file)) {
$line = fgets($file);
// or, since it's a CSV file:
$row = fgetcsv($file);
// $row is not an array with all the CSV columns
// do stuff with the line/row
}
// set the file pointer to 60 kb into the file
fseek($file, 60*1024);
// close the file
fclose($file);
Това няма да прочете целия файл в паметта. Не съм сигурен дали Laravel има свой собствен начин за работа с файлове, но това е как да се направи това в основния PHP.