Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2009, 04:00
Pabloskyp4p
 
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.