• User

    upload milioni di record

    Ciao a tutti,
    vi scrivo in quanto dopo innumerevoli tentativi sono entrato in fase disperazione!!!

    allora vi espongo il problema:
    devo inserire 20 milioni di record all'interno di un database mysql

    tentativi effettuati: ( solo quelli aventi un minimo risultato rispettabile)

    1- creazione pagina php contenente uno script php che inserisce i records prelevati da un txt ( che ho dovuto updatare nel server), all'interno del db.
    problema riscontrato: pur non avendo limiti di timeout in apache dopo circa 50.000 record sembra che mysql vada in errore chiudendo bruscamente la connessione ed impedendo così la continuazione dello script.

    2- importazione del db in un db mysql in locale, e utilizzando un tunnel attraverso l'applicazione navicat importazione dei dati.
    problema riscontrato: dopo ogni 10.000 record navicat perde la connessione, costringendomi a ricominciare l'upload ( con questa tecnica sono riuscito ad uploadare circa 200.000 record in 2 giorni ) non credo cmq sia la soluzione ideale

    Soluzione che mi piacerebbe adottare ( ma ho bisogno del vostro aiuto 😞
    Vorrei provare ad effettuare l'upload dei dati contenuti all'interno del mio db in locale nel server attraverso una pagina php personalizzata che girerà in locale.
    per fare questo però avrei bisogno di creare un tunnel di connessione con mysql in remoto (simulando il tunnel di navicat o di mysql-front) cosa che non riesco a fare.

    sono cmq ben accette proposte per altri metodi


  • User Attivo

    non sò se sia applicabile o logica, ma potresti inserire un tot di record alla volta (con una pagina php) e lasciando una pausa di qualche secondo tra un blocco e l'altro di record??
    questa mia ipotesi nasce dal fatto che, a quanto mi sembra di aver capito dal primo tentativo che hai postato, il db dopo un tot di record deve "respirare".. con alta probabilità quella che ho scritto è una ca**ata ma almeno ci ho provato.. 😄


  • User

    Ciao TiAgo,
    grazie per la risposta, nello script php che avevo fatto era prevista la disconnessione dal server ogni 50 record, ed una pauda effettuata attraverso il comando sleep, ma forse non è questo quello che intendevi dire.


  • Moderatore

    però non capisco una cosa, se hai un txt in formato cvs perchè non importarlo tramite PhpMyAdmin?


  • User Attivo

    @°antonio° said:

    Ciao TiAgo,
    grazie per la risposta, nello script php che avevo fatto era prevista la disconnessione dal server ogni 50 record, ed una pauda effettuata attraverso il comando sleep, ma forse non è questo quello che intendevi dire.
    è esattamente quello che volevo dire 🙂


  • User

    però non capisco una cosa, se hai un txt in formato cvs perchè non importarlo tramite PhpMyAdmin?
    semplicemente perchè un csv contenente 15.000.000 di record è un pò troppo pesantuiccio per essere importato da PhpMyAdmin (sono circa 600 Mb)


  • User Attivo

    @°antonio° said:

    semplicemente perchè un csv contenente 15.000.000 di record è un pò troppo pesantuiccio per essere importato da PhpMyAdmin (sono circa 600 Mb)

    Puoi dividere in varie parti il file e poi importare sequenzialmente le varie parti.


  • Super User

    la gestione di un numero così elevato di record comporta un'analisi del database che personalmente va un po' oltre le mie esperienze.
    Prima di pensare ad una soluzione per questo problema mi viene da chiederti... che carico di lavoro avrà questo server? Regge tutti questi record?

    per quanto riguarda l'importazione a mio avviso è risolvibile spezzando i dati in tanti file con un numero di record importabili.
    Da locale o remoto schedulare l'esecuzione di una pagina che importa il primo file esistente, quando importato lo rinomina o lo elmina.

    es:

    prima esecuzione importa il file
    1.txt
    importazione con successo -> rinomina in ok1.txt

    seconda esecuzione :
    esiste 1? no
    esiste 2? si
    importa 2.txt

    etc etc