miklos ha scritto:piu' che altro perche' il collo di bottiglia mi pare stia nello scaricamento e nella memorizzazione nel database..
potresti avere piu' chance(e ti parlo non conoscendo quello che devi fare) se mentre leggi linea per linea prepari una catena di insert(magari a lotti) in modo da ridurre le connessioni al database e al tempo stesso inserire piu' righe possibile.
Sono fiducioso perchè il problema l'ho già trattato in passato.
Questo script è passato da un server su cui il limite era più alto di 10 secondi.
Inizialmente lo script falliva perchè facevo una insert per ogni riga (era chiaramente troppo)
insert into tabella (campo,campo) values (val1,val2);
Poi una insert ogni blocco;
insert into tabella (campo;campo) values (val1,val2),(val3,val4).... ;
purtroppo i blocchi hanno dimensioni variabili, e qualche volta sono sufficientemente grandi da saturare la memoria a disposizione per php; tuttavia quando non si saturava le performance erano alte.
Alla fine ho trovato un compromesso.
Ho astratto la insert creando un buffer.
quando lancio una funzione insert() non mi viene sparata nel db ma in una variabile che mi funge da buffer. Alla seconda insert si accoda a questo buffer. Quando il buffer arriva al limite consentito, questo mi viene flushato nel db.
In questo modo il mio script su un server con limite a 30 secondi mi riusciva a scaricare ed inserire almeno una 50ina di file da 500K non compressi (che per quanto piccoli vanno scaricati) e una 20ina di file più grandi in bz2 (di cui la metà superano 1M, compresso).
Tutta l'operazione mi durava più di qualche minuto, ma non è mai fallita (evidentemente il tempo di elaborazione è abbastanza trascurabile rispetto al tempo di download ed insert).
Volevate qualche dettaglio maggiore sull'utilizzo che devo farne?
ok, eccolo:
http://slak.homelinux.org
Attualmente residente su un server che mi da solo 100M di db (ne ho bisogno di minimo 800 per ottenere tutte le funzionalità), in passato residente su un server di mia gestione (100G di db mi bastavano
), in fase di spostamento su un server che mi da 1.5G di db ma 10s di tempo di esecuzione.