Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dengan 30 Juta Aksara?

Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dengan 30 Juta Aksara?

DDD
Lepaskan: 2024-11-10 20:35:03
asal
590 orang telah melayarinya

How to Efficiently Process Large CSV Files with 30 Million Characters?

Memanipulasi Fail CSV Besar dengan Cekap: Mengendalikan Rentetan 30 Juta Aksara

Anda menghadapi ralat 'kehabisan ingatan' semasa memanipulasi CSV yang besar fail dimuat turun melalui Curl. Fail itu mengandungi kira-kira 30.5 juta aksara, dan percubaan untuk membahagikannya kepada tatasusunan baris menggunakan "r" dan "n" gagal kerana penggunaan memori yang berlebihan. Untuk mengelakkan ralat peruntukan, pertimbangkan pendekatan alternatif:

Penstriman Data tanpa Penulisan Fail:

Gunakan pilihan CURLOPT_FILE untuk menstrim data terus ke dalam pembungkus strim tersuai dan bukannya menulis ke sebuah fail. Dengan menentukan kelas pembalut strim anda sendiri, anda boleh memproses sebahagian daripada data apabila ia tiba tanpa memperuntukkan memori yang berlebihan.

Contoh Kelas Pembalut Strim:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        return true;
    }

    public function stream_write($data) {
        // Extract and process lines
        $lines = explode("\n", $data);
        $this->buffer = $lines[count($lines) - 1];
        unset($lines[count($lines) - 1]);

        // Perform operations on the lines
        var_dump($lines);
        echo '<hr />';

        return strlen($data);
    }
}
Salin selepas log masuk

Daftarkan pembalut strim:

stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
Salin selepas log masuk

Keriting Konfigurasi dengan pembalut strim:

$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl

curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
Salin selepas log masuk

Pendekatan ini membolehkan anda mengusahakan ketulan data secara berperingkat, mengelakkan peruntukan memori dan menjadikannya layak untuk beroperasi pada rentetan besar.

Pertimbangan Lain:

  • Uji pelaksanaan dengan teliti untuk memastikan ia mengendalikan garis panjang dan kes tepi lain.
  • Kod tambahan mungkin diperlukan untuk melaksanakan pangkalan data sisipan.
  • Penyelesaian ini berfungsi sebagai titik permulaan; penyesuaian dan pengoptimuman mungkin diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dengan 30 Juta Aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan