Jika Anda berpikir untuk membuat kueri seperti UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000
atau WHERE id IN (1, 2, 3, ..., 50000)
maka itu mungkin akan terlalu besar. Jika Anda dapat membuat beberapa logika untuk meringkasnya, itu akan mempersingkat kueri dan mempercepat segalanya di MySQL secara signifikan. Mungkin bisa dibuat WHERE id >= 1 AND id <= 50000
.
Jika itu bukan pilihan, Anda bisa melakukannya secara beruntun. Anda mungkin akan mengulang baris file CSV, membuat kueri sebagai WHERE id = 1 OR id = 2...
yang besar kueri dan setiap 100 baris atau lebih (atau 50 jika itu masih terlalu besar), jalankan kueri dan mulai yang baru untuk 50 ID berikutnya.
Atau Anda bisa menjalankan 50.000 UPDATE
single pertanyaan di database Anda. Sejujurnya, jika tabel menggunakan indeks dengan benar, menjalankan 50.000 kueri hanya membutuhkan waktu beberapa detik di sebagian besar server web modern. Bahkan server tersibuk pun dapat menanganinya dalam waktu kurang dari satu menit.
Untuk membaca file dalam potongan, Anda dapat menggunakan fungsi akses file dasar PHP untuk itu:
$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);
Ini tidak akan membaca file lengkap ke dalam memori. Tidak yakin apakah Laravel memiliki caranya sendiri dalam menangani file, tetapi ini adalah cara melakukannya di PHP dasar.