it-swarm-es.com

¿Cómo acelerar las operaciones de API por lotes?

Me he encontrado con esto tanto con módulos de contribución de terceros como con algunas de mis propias operaciones. Tengo curiosidad por las diversas formas de acelerar mi/contrib operaciones por lotes ?

Supongamos que funcionan con nodos (importación/actualización, etc.) y estamos lidiando con listas de análisis de nodos en el rango de más de 10,000 (aunque he tenido que lidiar con 15 millones de filas ... lo que sí, solo estoy jodido). .)

¿Es más rápido adjuntar a drupals cron.php trabajo y ejecutar "sin cabeza"? Usando Drush? o es simplemente una cuestión de qué tan eficiente y rápido análisis puedo desarrollar mi código y hay no influencias externas o consejos de optimización específicos de lote ...

Actualmente me he encontrado con operaciones que (usando un cálculo aproximado) ¡podría tomar más de 24 horas ...

¡Gracias!

12
electblake

Esto no funciona para el código contrib, pero si es su código y lo conoce bien, le recomiendo escribir un comando drush para hacer el trabajo. Dentro de drush, limite drupal_bootstrap () al nivel adecuado bootstrap. No puedo recordar los números reales, pero un porcentaje muy grande de tiempo por cada drupal se gasta en bootstrap, y puede ahorrar mucho tiempo allí.

Además, revisa las entrañas del módulo Migrate. No sé cómo funciona, es mojo (nunca se tomó el tiempo de asimilarlo), pero puede atravesar enormes lotes de nodos muy rápidamente.

9
justintime

Cada llamada por lotes es una solicitud HTTP. Por lo tanto, debe encontrar la combinación perfecta de cuántas iteraciones puede procesar antes de que se active otra solicitud HTTP. Dos cosas a considerar son la memoria y el tiempo máximo de ejecución. Deberá procesar tantas iteraciones como sea posible por lote para reducir la cantidad de solicitudes HTTP, ya que es probable que sean el culpable de su lote lento.

Si su lote es demasiado pesado para ejecutarse eficientemente, puede intentar usar una cola en su lugar. Aquí hay una buena presentación de lote vs. cola http://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown . Las colas no proporcionan comentarios de los usuarios y pueden ejecutarse en paralelo.

Si necesita comentarios de los usuarios, está vinculado al lote, pero incluso podría usar la cola en su lote para intentar optimizarlo.

8
Jepedo

Como otros han dicho, Drush es una buena solución, pero una cola es una gran herramienta para usar. La API por lotes en Drupal 7 usa la API de cola central incorporada, por lo que si está utilizando MySQL su proceso podría verse atrapado allí. Pero, Drupal 7's Queue API es conectable, por lo que podría usar otro sistema de cola como beanstalkd.

2
bjeavons

Si puedes hacerlo paralelo, es un buen comienzo. Aquí están algunos de mis pensamientos sobre esto, ya que he usado 4 hilos para rastrear más de un millón de páginas antes (a través de impulso). Buscando hacerlo generalizado ahora. http://groups.drupal.org/node/126624

1
mikeytown2