Se você está pensando em construir uma consulta como
UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000
ou WHERE id IN (1, 2, 3, ..., 50000)
então isso provavelmente será muito grande. Se você puder fazer alguma lógica para resumir isso, encurtaria a consulta e aceleraria significativamente as coisas no final do MySQL. Talvez você possa fazer WHERE id >= 1 AND id <= 50000
. Se isso não for uma opção, você pode fazê-lo em rajadas. Você provavelmente vai percorrer as linhas do arquivo CSV, construir a consulta como um grande
WHERE id = 1 OR id = 2...
query e a cada 100 linhas ou mais (ou 50 se ainda for muito grande), execute a consulta e inicie uma nova para os próximos 50 IDs. Ou você pode simplesmente executar 50.000
UPDATE
único consultas em seu banco de dados. Honestamente, se a tabela fizer uso adequado de índices, a execução de 50.000 consultas deve levar apenas alguns segundos na maioria dos servidores modernos. Mesmo os servidores mais ocupados devem ser capazes de lidar com isso em menos de um minuto. Quanto à leitura de um arquivo em pedaços, você pode usar as funções básicas de acesso a arquivos do PHP para isso:
$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);
Isso não lerá o arquivo completo na memória. Não tenho certeza se o Laravel tem sua própria maneira de lidar com arquivos, mas é assim que se faz isso no PHP básico.