Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perlu Metode Hemat Waktu Mengimpor File CSV Besar Melalui PHP Ke Beberapa Tabel MySQL

Saya telah menulis skrip PHP untuk memuat data secara massal yang diterbitkan oleh dump data Stack Overflow. Saya mengimpor jutaan baris dan tidak butuh waktu lama.

Berikut beberapa kiatnya:

  • Jangan mengandalkan komit otomatis. Overhead untuk memulai dan melakukan transaksi untuk setiap baris sangat besar. Gunakan transaksi eksplisit, dan lakukan setelah setiap 1000 baris (atau lebih).

  • Gunakan pernyataan yang sudah disiapkan. Karena pada dasarnya Anda melakukan sisipan yang sama ribuan kali, Anda dapat menyiapkan setiap sisipan sebelum mulai mengulang, dan kemudian mengeksekusi selama pengulangan, meneruskan nilai sebagai parameter. Saya tidak tahu bagaimana melakukan ini dengan perpustakaan database CodeIgniter, Anda harus mengetahuinya.

  • Setel MySQL untuk impor. Meningkatkan buffer cache dan sebagainya. Lihat Kecepatan Pernyataan INSERT untuk informasi lebih lanjut.

  • Gunakan LOAD DATA INFILE. Jika memungkinkan. Ini benar-benar 20x lebih cepat daripada menggunakan INSERT untuk memuat data baris demi baris. Saya mengerti jika Anda tidak bisa karena Anda perlu mendapatkan id sisipan terakhir dan seterusnya. Namun dalam kebanyakan kasus, bahkan jika Anda membaca file CSV, mengatur ulang dan menuliskannya ke beberapa file CSV sementara, pemuatan data masih lebih cepat daripada menggunakan INSERT.

  • Lakukan secara offline. Jangan menjalankan tugas yang berjalan lama selama permintaan web. Batas waktu permintaan PHP akan mengakhiri pekerjaan, jika tidak hari ini maka Selasa depan ketika pekerjaan 10% lebih lama. Sebagai gantinya, buat antrean permintaan web sebagai pekerjaan, lalu kembalikan kontrol ke pengguna. Anda harus menjalankan impor data sebagai proses server, dan secara berkala mengizinkan pengguna untuk melihat sekilas tingkat kemajuan. Misalnya, cara murah untuk melakukannya adalah agar skrip impor Anda menghasilkan "." ke file temp, dan kemudian pengguna dapat meminta untuk melihat file temp dan terus memuat ulang di browser mereka. Jika Anda ingin menjadi mewah, lakukan sesuatu dengan Ajax.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java PreparedStatement dan ON DUPLICATE KEY UPDATE:bagaimana saya tahu apakah baris dimasukkan atau diperbarui?

  2. RuntimeError dengan mysql2 dan Rails3 (bundler)

  3. Menggunakan pilih ke dalam variabel lokal dan pernyataan yang disiapkan di mysql

  4. Menggunakan Oracle JDeveloper dengan Layanan Database MySQL di Oracle Cloud Platform, Bagian 2

  5. Menggunakan eksklusif atau di mysql