2011-05-12 12 views
5

He oído hablar de cron job y no creo que la creación real sea tan difícil de hacer, pero tengo algunas preocupaciones acerca de cómo funcionará esto con un gran scriptCron trabajo en una gran base de datos con PHP, se necesitan sugerencias

Sin ir demasiado fuera de tema en mi proyecto me quedaré con los conceptos básicos sobre mi situación. Necesito hacer un script que todos los días realice una búsqueda de CURL para datos en un sitio web remoto y actualice una base de datos para cada miembro destacado en mi sitio web. En resumen, es aproximadamente en este momento 1000 veces la secuencia de comandos debe ser ejecutada, pero será un número mayor a medida que pasan los tiempos.

Como se puede adivinar, esto llevará mucho tiempo para preformar, así que estoy preocupado acerca de cómo funcionará la ejecución de una manera de no estrellarse en el medio de ella.

Mi primer pensamiento fue tal vez dividir a los usuarios en grupos y hacer las ejecuciones en una pequeña cantidad de usuarios cada vez, pero no sé cómo esto es manejable (leerá más sobre el tema cuando tenga alguna forma de confirmación sobre esto).

Por lo tanto, a mi pregunta. ¿Crees que hay alguna manera de que esto ocurra y quizás tengas alguna sugerencia sobre cómo hacer que esto funcione de manera eficiente? Toda la ayuda que puedo obtener es apreciada. Gracias por tu tiempo.

+0

I li ke la idea de dividir a los usuarios en grupos de tamaño. Además, aumente el tiempo máximo de ejecución del script en el script php para evitar que salga antes de que finalice. – Detect

+0

¿Cuánto tiempo estamos hablando? –

+3

¿Por qué no probarlo antes de preocuparse por la optimización? La optimización prematura es la fuente de todos los males. –

Respuesta

1

cron-jobs más grandes con php y mysql necesita ser fragmentado, ya que no hay forma de que usted los 'nice', (reducir su prioridad de os). Incluso si le agrada el script, las solicitudes de mysql se ejecutarán sin esta preocupación.

De lo que estás describiendo hay dos aspectos a considerar:

  • congestión del ancho de banda de red
  • Congestión de rendimiento de base de datos

Me gustaría recomendar una solución fragmentado en el que llama a su secuencia de comandos de cron más a menudo, y deje que el script ejecute solo una pequeña cantidad del trabajo total. El trabajo debe ser cancelado (pospuesto a la siguiente ejecución) si el uso de i/o-bandwith o cpu está por encima de cualquier límite que pueda afectar el tiempo de respuesta a los visitantes.

cordiales, /t

0

Una manera:

Normalmente estoy en contra de poner la lógica en la base de datos, pero en este caso un stored procedure podrían ayudar. Ejecutará su trabajo más rápido (ya que es uno grande) y también desea bloquear las tablas a medida que lo hace. De esta forma, si el script que llama al procedimiento almacenado es golpeado por cron antes de que el trabajo original haya terminado, no editará su base de datos mientras se está ejecutando la primera.

0

El tiempo real puede no dar una respuesta directa en pero en base a previamente experimenta esto llevará ya continuación el tiempo de ejecución máximo .

Así que resuelva ese problema. Hay una razón por la que puede tener un php.ini diferente para la interfaz de línea de comando. Entonces, simplemente puede enfocarse en procesar todos los usuarios en un script.

Cuestiones relacionadas