2009-11-20 24 views
8

estoy tratando de cargar un archivo de 95 GB CSV en una base de datos de MySQL (MySQL 5.1.36) mediante el siguiente comando:Cargue un archivo CSV de 95 GB en la tabla MyISAM de MySQL mediante Cargar archivo de datos: motor CSV ¿una alternativa?

CREATE TABLE MOD13Q1 (
rid INT UNSIGNED NOT NULL AUTO_INCREMENT, 
gid MEDIUMINT(6) UNSIGNED NOT NULL , 
yr SMALLINT(4) UNSIGNED NOT NULL , 
dyyr SMALLINT(4) UNSIGNED NOT NULL , 
ndvi DECIMAL(7,4) NOT NULL comment 'NA value is 9', 
reliability TINYINT(4) NOT NULL comment 'NA value is 9', 
ndviquality1 TINYINT(1) NOT NULL , 
ndviquality2 TINYINT(1) NOT NULL , 
primary key (rid), 
key(gid) 
) ENGINE = MyISAM ; 

LOAD DATA INFILE 'datafile.csv' INTO TABLE MOD13Q1 FIELDS TERMINATED by ',' LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(gid, yr, dyyr, ndvi, reliability, 
ndviquality1, ndviquality2 
) ; 

estoy ejecutando este script a través de DOS en el momento, pero la base de datos no está respondiendo. Funciona para archivos CSV más pequeños (1,5 GB) bien. ¿Funcionaría para este tamaño de archivo?

¿Tiene alguna recomendación sobre cómo hacer esto de manera más eficiente/más rápida? ¿El motor = CSV sería una alternativa (la indexación no está activada? -> entonces ¿las consultas pueden ser súper lentas?).

actualización

Gracias por los consejos, funcionó!

mysql> LOAD DATA INFILE 'E:\\AAJan\\data\\data.csv' INTO TABL 
E MOD13Q1 
    -> FIELDS TERMINATED by ',' 
    ->  LINES TERMINATED BY '\r\n' 
    ->  IGNORE 1 LINES 
    ->  (gid, yr, dyyr, ndvi, reliability, 
    ->  ndviquality1, ndviquality2 
    -> ) ; 
Query OK, -1923241485 rows affected (18 hours 28 min 51.26 sec) 
Records: -1923241485 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> 

Espero que esto sea útil para los demás evitando la división de datos en pedazos.

+0

@Mark: tokyo cabinet es clave/valor DBM así que nada que hacer en mi humilde opinión – RageZ

Respuesta

1

Debe desactivar todas las restricciones cuando está importando. Aparte de eso, creo que debería funcionar correctamente y señalar que tomará un tiempo, probablemente horas.

3

No hay manera fácil, tendrá que dividir los datos en trozos y luego importar los ...

0

Bcp? .................................. ¡Oh, espera! No importa de todos modos, será una transacción masiva. Necesitas trozos. Lo necesita para evitar el sobrellenado de su espacio de segmento de registro. Los límites de conteo de bloqueo. Algo más de 1 millón de cosas en un momento es demasiado. ¡Entonces el tamaño de lote más conocido para BCP es de 10,000 registros!

0

estoy de acuerdo con Ragez y Sarfraz respuestas, pero tengo algo que añadir.

1. El aumento de caché de base de datos y volver a configurar algunas opciones de MySQL puede ayudar (uso de memoria RAM).

Tome un vistazo a esto:

Mysql Database Performance tuning

Creo que usted debe centrarse en write_buffer, read_buffer, query_cache_size y otra RAM y opciones de E/S en cuestión.

2. Probablemente necesite un dispositivo de almacenamiento más rápido. ¿Qué estás usando ahora?

Para la base de datos grande como esto - se debe utilizar matriz RAID-5 con discos duros rápidos y modernos.

Tal configuración es suficiente para las tareas diarias, pero ¿qué pasa con las copias de seguridad y situaciones crysis?

Creación de copia de seguridad y restauración de la base de datos grande como esto va a tomar mucho tiempo en la máquina, que necesita 18 horas para la importación sencilla inserción.

sé que es realmente 95GB archivo de texto grande, pero ... Creo que debe utilizar el hardware que es capaz de hacer operaciones sencillas como esta en un máximo de 23 horas.

0

Puede intentar usar MySQLTuner - Script de ajuste de MySQL de alto rendimiento escrito en perl que le ayuda con su configuración de MySQL y hace recomendaciones para un mayor rendimiento y estabilidad.

Cuestiones relacionadas