首頁  >  文章  >  後端開發  >  如何高效處理3000萬字符的大型CSV檔案?

如何高效處理3000萬字符的大型CSV檔案?

DDD
DDD原創
2024-11-10 20:35:03541瀏覽

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

高效操作大型CSV 檔案:處理3000 萬個字元的字串

操作大型CSV 時遇到「記憶體不足」錯誤通過Curl 下載的檔案。該檔案包含大約 3050 萬個字符,嘗試使用“r”和“n”將其拆分為行數組會由於內存消耗過多而失敗。為了避免分配錯誤,請考慮替代方法:

串流資料而不寫入檔案:

利用CURLOPT_FILE 選項將資料直接串流到自訂流包裝器中,​​而不是寫入一個檔案。透過定義自己的流包裝器類,您可以在資料塊到達時對其進行處理,而無需分配過多的記憶體。

示例流包裝器類:

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);
    }
}

註冊流包裝器:​​

stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");

使用流包裝器配置Curl:

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

curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream

這種方法可讓您增量地處理資料塊,避免記憶體分配並使其可以對大字串進行操作。

其他注意事項:

  • 徹底測試實作以確保它能夠處理長行和其他邊緣情況。
  • 可能需要額外的程式碼來執行資料庫操作插入。
  • 此解決方案作為起點;可能需要客製化和最佳化。

以上是如何高效處理3000萬字符的大型CSV檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn