Foros del Web » Programando para Internet » PHP »

Programndo un robot de búsqueda, dudas sobre rendimiento.

Estas en el tema de Programndo un robot de búsqueda, dudas sobre rendimiento. en el foro de PHP en Foros del Web. Hola, estoy programando un robot de búsqueda (con ayuda del sphider 1.3, estoy reutilizando parte de su código) y tengo un par de dilemas. El ...
  #1 (permalink)  
Antiguo 24/08/2009, 04:00
 
Fecha de Ingreso: junio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Programndo un robot de búsqueda, dudas sobre rendimiento.

Hola, estoy programando un robot de búsqueda (con ayuda del sphider 1.3, estoy reutilizando parte de su código) y tengo un par de dilemas.

El objetivo de este engendro (por que otro nombre no tiene lo que me está saliendo) es recopilar y procesar información publicada en los boletines oficiales provinciales de toda España. Concretamente multas, DNI y nombres de empresa.

Esos datos NO los guarda, sino que los compara con los datos de una empresa de alquiler (60.000 vehículos de flota) y si sale un positivo se los queda y notifica a un departamento de mi empresa la posible sanción publicada, o sino encuentra coincidencias los desprecia.

Duda 1: ¿Qué consumiría menos CPU? ¿Que por cada matrícula encontrada hiciera una query comparativa contra las 60.000 matrículas o que metiera las 60.000 matriculas en un array y luego usara la función "is in array" para comparar?

El sentido común me dice: usa la segunda opción, pero durante las pruebas que he hecho la cosa no va especialmente bien. De hecho, usando el método 100% Mysql tarda dos horas menos en escanear el boletín de Madrid...

Duda 2: Los que generan los boletines MERECEN LA MUERTE o algo peor. No hay dos iguales, y encima hay burradas de todo tipo. O escriben la matrícula como les sale del nabo (arreglado usando expresiones regulares) o ponen caracteres "falsos" delante y detrás. Por ejemplo, una matricula en el PDF del boletín de Madrid se leería como "M0000AA", pero en realidad el sistema la recoge como "ÃM0000AAÃ". Lo que va en negrita ni siquiera es visible, son caracteres INVISIBLES que el robot detecta y que jode todas las comparaciones.

Alguno dirá, pues sencillo, quitalos. Ya, ya lo he hecho, pero a veces se van, a veces no (cosas de los boletines, no del PHP), a veces son 2, a veces 1, a veces 0. Total, que al final la búsqueda he tenido que hacerla con varias variables por matrícula formateada de varias maneras y usando LIKE "%$matricula%" en vez de algo normal (y que consuma menos CPU).

La duda es: ¿Como puedo pasar una busqueda LIKE "%$matricula%" a la función ISINARRAY o similar? Por que es que, además de ir más lento, esta función me devuelve menos resultados positivos que el método MySQL...

Espero vuestros sabios consejos.
  #2 (permalink)  
Antiguo 24/08/2009, 08:29
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

A ver, dejame darte una mano, no con código, sino más bien pensando como lo encararía yo. Antes que nada, te aviso que no conozco sphider.

Primero, lo de los caracteres "raros" que decís que te salen, eso es por diferencias en los tipos de ENCODING de los documentos que estás escaneando. Si pudieras en alguna parte de tu código reconocer los distintos encodings, entonces no tendrías problemas de caracteres raros y te quedaría la información pura.

Por otro lado, ejecutar todo al mismo tiempo, debe estar consumiendo muchísimos recursos, entonces yo lo que te propondría es una ejecución diferida. Qué es esto? Básicamente, dividí en dos tus procesos principales, y optimizá a los dos por separado:

1) Spider de documentos
Por un lado, tené optimizado tu código de escaneo. Que sea lo más pequeño y rápido a la hora de procesar un tipo de documento, y guardarlo en la base de datos. Escaneo, comparación, guardado, tiene que ser un proceso hiper optimizado y tiene que correr la mayor cantidad de veces posible, por ejemplo, cada una hora.

2) Procesado de documentos
Acá tenés el otro proceso, que tiene que tomar básicamente el trabajo desde donde lo dejó la última vez ( esto es, tenés que tener un método para reconocer que información ya procesaste e ignorarla ), revisando lo que ya tenés cargado en la base gracias al spider, y encargarte en optimizar el procesamiento de la información que te interesa.

Acá es donde jugás con tus expresiones regulares, tenés en cuenta los distintos formatos de información, etc. Este es un proceso un poco más pesado, pero corrido en otro proceso al del spider, puede optimizarse mejor. Aparte, este proceso podés ejecutarlo CUANDO necesites, independientemente del otro, por ejemplo, una vez al día, o cada 12 horas. Este proceso, incluso, podría separarse en dos, dejando para OTRO proceso, el envío de alertas.

3) Envío de alertas.
Supongamos que el proceso anterior, procesa toda la información que tenés disponible, y deja en alguna tabla las incidencias que está programado para reconocer. Entonces el último proceso de envío de alertas, puede tomar esas incidencias, y hacer lo que considere necesario: enviar un mail, un sms, preparar el café o hacer sonar una sirena.

Este último proceso podés hacer que se ejecute automáticamente luego del segundo, o diferirlo un tiempo (digamos, 2 horas después que termine el 2º) o directamente ponerlo cada 24 horas.

Nada, lamento no tener código para ayudarte, pero muchas veces los problemas no son de código específicamente, sino más bien de los métodos que elegimos para resolver un problema.

Saludos!
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #3 (permalink)  
Antiguo 24/08/2009, 09:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

Tema trasladado desde PHP Orientado a Objetos.
  #4 (permalink)  
Antiguo 24/08/2009, 13:58
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

Mi estimado GatorV, no estaría bueno dejar al menos una redirección temporal (una semana) en el foro original, para los que de repente no encuentren el tema donde estaba antes?

Pienso que quizás es mejor, porque dentro de todo en el foro PHP Orientado a Objetos el movimiento es menor, pero al pasar este mensaje a PHP, directamente en 15 minutos, ya estuvo en la segunda página de resultados :(

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #5 (permalink)  
Antiguo 24/08/2009, 14:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

Las redirecciones las dejo cuando las muevo a foros diferentes, y todavía estoy pensando en ver si dejo este tema aquí ya que tampoco es un problema como tal de PHP, igual quedaría mejor en el foro de Ingeniería de Software y Gestión de Proyectos.

Saludos.
  #6 (permalink)  
Antiguo 24/08/2009, 14:04
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

Mi sugerencia? Dejalo un tiempo más por acá, al menos hasta que responda el usuario original, o alguien sea tan gentil como para regalarle un poco de código ( cosa que yo no pude hacer ). Si la charla se sigue manteniendo tan metafísica y conceptual, entonces es un candidato firme para Ing. de Software y Gestión de Proyectos.

saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 24/08/2009, 14:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Programndo un robot de búsqueda, dudas sobre rendimiento.

Habría que ver como sigue el mensaje, por ahora esta bien aquí ya que no ha expuesto nada que lo haga candidato para estar en el foro de PHP OO.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:10.