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! |