Przejde do rzeczy. Mamy tablice, w ten sposób:
$data = [ 0 => [ // 70 tyś. rekordów 0 => [] // tutaj średnio 5-6 rekordów, // i tak dalej ], 1 => [], 2 => [], // i tak dalej. ];
Ogólnie takich małych tablic po 5-6 rekordów jest ok. 8mln. Podzielone są po 70 tyś. Teraz te 70 tyś. zapisuje w postaci .csv:
foreach ($this->result as $fileNumber => $data) { foreach ($data as $line) { fputcsv($stream, $line, $this->config['delimiter']); } $content = stream_get_contents($stream); $content = str_replace('"', '', $content); // potrzeba usuwania ", w żadnym innym miejscu tego zrobić nie mogę, a iterować po całej tablicy i robić na mniejszych stringach to bezsensu moim zdaniem... jak myślicie? $now = new \DateTime('now'); $fileName = $fileName . $now->format('Y-m-d-h-i-s') . "_{$fileNumber}_" . '.csv'; }
Teraz sedno sprawy:
Przy 100k rekordów trwa to dosłownie kilka sekund. Przy 1mln trwa to już średnio 3 minuty (ostatnia próba: 223 sekundy) (licze z pomocą microtime(true)). Nawet boje się włączyć na 8mln rekordów...
Jakiś pomysł jak to przyśpieszyć? Cel: zapis do pliku .csv.