En esta ocasión vamos a ver como crear un archivo de texto con formato tsv de un millón de registros con Faker, y posteriormente, como cargarlo en una nueva tabla de base de datos.
Crear el TSV
Para empezar, vamos a crear una nueva carpeta en nuestro servidor web, y mediante composer, instalaremos la librería fzaninotto/faker. Una vez instalado vamos a crear el siguiente archivo de php llamado creador.php:
<?php
require_once "vendor/fzaninotto/faker/src/autoload.php";
$faker = Faker\Factory::create("es_ES");
$datos = "";
$datos .= "dni\t";
$datos .= "licencia\t";
$datos .= "nombre\t";
$datos .= "apellido\t";
$datos .= "telefono\t";
$datos .= "\n";
for ($i = 0; $i < 1000000; $i++) {
$datos .= $faker->dni . "\t";
$datos .= $faker->licenceCode . "\t";
$datos .= $faker->firstName . "\t";
$datos .= $faker->lastName . "\t";
$datos .= $faker->phoneNumber . "\t";
$datos .= "\n";
}
$rutaArchivo = "personas.txt";
if (file_put_contents($rutaArchivo, $datos)) {
echo "Archivo creado correctamente en: " . $rutaArchivo . "\n";
} else {
echo "Error, no se ha creado el archivo\n";
}
Ahora, desde la linea de comandos, ejecutamos este archivo php (php creador.php) para crear el tsv, esto nos generará un nuevo archivo llamado personas.txt con un millón de registros de datos de prueba.
Importarlo en base de datos
Ahora para cargarlo en base de datos, primero necesitamos crear la tabla (en caso de no existir), para nuestro ejemplo crearemos la tabla con la siguiente sentencia:
CREATE TABLE `personas` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`dni` varchar(255) NOT NULL,
`licencia` varchar(255) DEFAULT NULL,
`nombre` varchar(255) NOT NULL,
`apellidos` varchar(255) NOT NULL,
`telefono` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1048561 DEFAULT CHARSET=utf8;
Aviso, las columnas de la sentencia anterior no tienen los tipos de datos adecuados, no es conveniente utilizar varchar para todo, pues cuando se trata de grandes volúmenes la memoria se puede ver afectado el rendimiento a la hora de almacenar y recuperar los datos. Esto es solo un ejemplo rápido para que podáis probar el ejercicio.
Crearemos un nuevo script de php para cargar estos datos del tsv en la tabla de base de datos, se llamará carga-datos.php, y tendrá la siguiente pinta:
<?php
$mysqli = new mysqli("127.0.0.1", "root", null, "tests", "3306", 'pdo_mysql');
if ($mysqli->connect_error) {
die('Error de Conexión (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$resultado = $mysqli->query( "
LOAD DATA LOCAL INFILE 'personas.txt'
INTO TABLE personas
CHARACTER SET utf8
FIELDS TERMINATED BY '\t'
ENCLOSED BY ''
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@col1, @col2, @col3, @col4, @col5)
set dni=@col1, licencia=@col2, nombre=@col3, apellidos=@col4, telefono=@col5;
");
if ($resultado == false) {
die("Error: " . $mysqli->error."\n");
} else {
echo "Datos cargados en base de datos\n";
}
Solo queda ejecutar el script «php carga-datos.php» para importarlo, y ya tendremos nuestros datos cargados en base de datos.
Enlaces: