2011-10-30 11 views
16

Tengo un cronjob que se ejecuta cada horas y analiza más de 150,000 registros. Cada registro se resume individualmente en tablas de MySQL. Uso dos servicios web para recuperar la información del usuario.Cronjob: consulta del servicio web

  1. usuario demográfica (ip, país, ciudad, etc.)
  2. información Teléfono (si es fijo o teléfono celular y teléfono celular si lo es el portador)

Cada vez que consiguen 1 registro I compruebe si tengo información y si no, llamo a estos servicios web. Después de rastrear mi código descubrí que estas dos llamadas demoran de 2 a 4 segundos y hace que mi cronjob sea muy lento y no puedo compilar las estadísticas a tiempo.

¿Hay alguna manera de hacer que estos servicios web sean más rápidos?

Gracias

Respuesta

22

simple:

obtener los datos localmente y utilizar los datos mellissa:

  1. para ip: http://w10.melissadata.com/dqt/websmart/ip-locator.htm
  2. para el teléfono: http://www.melissadata.com/fonedata.html

también puede almacenarlos en caché utilizando Memcache o APC que wi Lo haré más rápido ya que no tiene que solicitar los datos de la API o la base de datos.

+0

¿Hay una versión gratuita? – Tech4Wilco

+0

para geodatos sí puede usar maxmind pero para el teléfono, lo dudo –

+0

gracias, intentaré que uno – Tech4Wilco

4

Un par de ideas ... si los mismos usuarios están regresando, el almacenamiento en caché de los datos en otra tabla sería muy útil ... solo lo buscaría una vez y lo tendría para usuarios recurrentes. Al volver a leer la pregunta, parece que estás haciendo eso.

Otra opción sería engendrar nuevos hilos cuando necesite hacer las búsquedas. Esto podría ser un nuevo hilo para cada solicitud, o si esto no es factible, podría tener n hilos de servicio listos para hacer las búsquedas y actualizar los resultados.