-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 31/03/2013 23:58, Aplemaser ha scritto: > Il giorno 31 marzo 2013 22:02, Manlio Perillo <manlio.peri...@gmail.com > <mailto:manlio.peri...@gmail.com>> ha scritto: > > > Ok. > Allora andiamo con ordine. > Che database usi? > Quanto tempo impiega il tuo codice, e quanto tempo vorresti impiegasse? > > [...] > Attualmente il tempo di importazione è di 4 ore o poco meno. Voglio > ridurre il tempo, ma non so fino a quanto posso arrivare.
Con ottimizzazioni molto aggressive (sia sul tuo codice che sulla configurazione del database) non è impossibile scendere sotto i 30 minuti. > Tutto è nato > perchè ho notato che 3 core su 4 dormono i sonni dei giusti mentre > l'altro corse lavora come un pazzo e quindi vorrei impegnare la CPU per > ridurre questi tempi. > L'alto utilizzo della CPU è solo del tuo programma, o di tutto il sistema (quindi incluso eventualmente il database) ? Se usi un sistema UNIX, puoi utilizzare il comando time per ottenere valori precisi dei tempi impiegati. Di preciso posso dirti che se i bytes totali dei file CSV sono dell'ordine dei 10GB, puoi ottenere un incremento di prestazioni da 5 a 8 volte *solo* ottimizzando il codice. Lo dico per esperienza personale con un parser che deve leggere riga per riga un file di 60G, e che l'implementazione ottimizzata scritta in C richiede 8 minuti, mentre quella Python e quella in C non ottimizzato richiedono più di un ora (ma non so di preciso quanto, perchè non avevo voglia di aspettare). Se poi devi inserire grosse moli di dati nel database, l'ottimizzazione della configurazione del database può portare ad incrementi di prestazioni notevoli. PostgreSQL permette *molte* ottimizzazioni, dal semplice e safe comando COPY a ottimizzazioni più agressive (e pericolose per l'integrità dei dati in caso di crash). Le ottimizzazioni che puoi fare dipendono da come processi i dati, e da come usi il database. Per questo dicevo che devi spiegare in modo chiaro e completo cosa devi fare, altrimenti chi legge può solo darti consigli generici che magari hanno il solo risultato di fare aumentare la tua confusione. > > Supponi che ciascun file CSV contenga i dati da inserire in una sola > tabella. > Invece di processare ciascun file CSV in seguenza, puoi farlo in > parallelo usando un processo separato. > > [...] > > Non è la base di partenza che ho, cioè non ho CSV tutti uguali da > importare in processi separati, ma ho capito esattamente il tuo > suggerimento. > Io non ho detto che devi avere files tutti uguali. L'importante che per processare ed inviare al database i dati di un file CSV, tu non abbia bisogno dei dati presenti in altri file CSV. > Ancora grazie mille delle risposte e dell'attenzione. > Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlFZj08ACgkQscQJ24LbaUSrGQCeNWQd1C4uwQCoKCVkgRndKDgn oLMAoI7rjrQfpGE4x4up9l6nEbYrTo35 =txpm -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python