J'ai un fichier CSV avec 1 000 000 lignes et j'ai besoin d'importer ces lignes dans la table PostgreSQL DB, j'ai besoin de le faire très rapidement comme il le peut.Importer rapidement le fichier CSV à postgre
J'ai essayé d'utiliser des générateurs et fsync = off, mais de toute façon j'ai eu le même résultat
maintenant importer le temps est de 17 secondes, comment je peux optimiser le code ou db pour réduire le temps?
Mon code:
<?php
$time_start = microtime(true);
ini_set('max_execution_time', 300);
require_once 'db-config.php';
function generateString($length = 15)
{
$chars = 'qwertyuioplkjhgfdsazxcvbnm';
$numChars = strlen($chars);
$string = '';
for ($i = 0; $i < $length; $i++)
{
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}
return $string;
}
$fileName = fopen("users.csv", 'a');
for ($i=0; $i < 1000000 ; $i++)
{
$firstName = generateString(15);
$lastName = generateString(15);
$age = rand(10, 90);
fputcsv($fileName, [$firstName, $lastName, (string)$age]);
}
fclose($fileName);
$sql = "COPY users FROM '/home/artur/Documents/Projects/test.com/users.csv' CSV;";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Done! ({$time} seconds)";
Et quel est le problème? – Epodax
Maintenant le temps d'importation est de 17 secondes, comment puis-je optimiser le code ou DB pour réduire le temps? –
1 000 000 lignes en 17 secondes. Est-ce vraiment mauvais? – jarlh