2009-11-20 10 views
8

Sto cercando di caricare un file di CSV 95 GB in un database MySQL (MySQL 5.1.36) tramite il seguente comando:Carica file CSV da 95 GB nella tabella MyISAM MySQL tramite Caricamento infile dati: motore CSV un'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 
) ; 

Io corro questo script tramite DOS al momento, ma il database non risponde. Funziona con file CSV di dimensioni inferiori (1,5 GB). Funzionerebbe per questa dimensione del file?

Avete qualche suggerimento su come farlo in modo più efficiente/più veloce? Il motore = CSV sarebbe un'alternativa (indicizzazione non attivata! -> quindi le query potrebbero essere super lente?).

Aggiornamento

Grazie per i suggerimenti, ha funzionato!

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> 

Spero che questo sia utile per gli altri evitando di suddividere i dati in blocchi.

+0

@ Mark: tokyo cabinet è chiave/valore DBM quindi niente da fare IMHO – RageZ

risposta

1

È necessario disabilitare tutti i vincoli durante l'importazione. A parte questo, penso che dovrebbe funzionare correttamente e va notato che ci vorrà un po ', probabilmente ore.

3

alcun modo semplice, si dovrà dividere i dati in blocchi e quindi importare quelle ...

0

Bcp? .................................. Oh aspetta. Non importa comunque sarà una transazione di massa. Hai bisogno di pezzi. Ne hai bisogno per evitare di riempire eccessivamente lo spazio del tuo segmento di log. I limiti del conteggio dei blocchi. Qualcosa di più grande di 1 milione di cose alla volta è troppo. Quindi la dimensione del batch più conosciuta per BCP è di 10.000 record!

0

Sono d'accordo con RageZ e Sarfraz risponde, ma ho qualcosa da aggiungere.

1. L'aumento della cache del database e la riconfigurazione di alcune opzioni di MySQL possono aiutare (utilizzo RAM).

Date un'occhiata a questo:

Mysql Database Performance tuning

Credo che si dovrebbe concentrare su write_buffer, read_buffer, query_cache_size e altri RAM e opzioni di I/O connessi.

2. Probabilmente è necessario un dispositivo di archiviazione più veloce. Cosa stai usando adesso?

Per un database grande come questo, è necessario utilizzare un array RAID-5 con dischi rigidi veloci e moderni.

Forse la configurazione è sufficiente per le attività quotidiane, ma per quanto riguarda i backup e le situazioni di crisi?

La creazione di un database di backup e ripristino di dimensioni così grandi richiederà troppo tempo sulla macchina, che richiede 18 ore per l'importazione di un semplice inserto.

So che 95 GB è veramente un grande file di testo, ma ... penso che dovresti usare hardware in grado di eseguire operazioni semplici come questa in massimo 2-3 ore.

0

È possibile provare a utilizzare MySQLTuner - Script di ottimizzazione MySQL ad alte prestazioni scritto in perl che aiuta nella configurazione di MySQL e fornisce consigli per prestazioni e stabilità migliorate.

Problemi correlati