2011-10-30 14 views
16

Ho un cronjob che viene eseguito ogni ora e analizza oltre 150.000 record. Ogni record è riepilogato individualmente in una tabella MySQL. Io uso due servizi web per recuperare le informazioni dell'utente.Cronjob: query servizio Web

  1. utente demografiche (ip, paese, città, ecc)
  2. informazioni Telefono (se fisso o cellulare e, se il cellulare qual è il vettore)

Ogni volta che ho 1 disco che ho controlla se ho informazioni e se no chiamo questi servizi web. Dopo aver tracciato il mio codice, ho scoperto che entrambe le chiamate richiedono da 2 a 4 secondi e rendono il mio cronjob molto lento e non riesco a compilare statistiche in tempo.

C'è un modo per rendere questi servizi Web più veloci?

Grazie

risposta

22

semplice:

ottenere i dati in locale e utilizzare i dati Mellissa:

  1. per IP: http://w10.melissadata.com/dqt/websmart/ip-locator.htm
  2. per il telefono: http://www.melissadata.com/fonedata.html

è anche possibile memorizzali in cache usando memcache o APC che wi Lo renderò più veloce dal momento che non deve richiedere i dati dall'api o dal database.

+0

Esiste una versione gratuita? – Tech4Wilco

+0

per i geodati si puoi usare maxmind ma per il telefono, ne dubito –

+0

grazie, proverò che uno di – Tech4Wilco

4

Un paio di idee ... se gli stessi utenti stanno tornando, memorizzare i dati in un'altra tabella sarebbe molto utile ... si dovrebbe cercare solo una volta e averlo per il ritorno degli utenti. Dopo aver riletto la domanda sembra che tu stia facendo quello.

Un'altra opzione sarebbe quella di generare nuovi thread quando è necessario effettuare le ricerche. Questo potrebbe essere un nuovo thread per ogni richiesta, o se questo non è fattibile potresti avere n thread di servizio pronti a fare le ricerche e aggiornare i risultati.