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


12

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 mis operaciones por lotes / contrib ?

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 no hay influencias externas o consejos de optimización específicos del lote ...

Actualmente me he encontrado con operaciones que (usando algunos cálculos aproximados) podrían tomar más de 24 horas ...

¡Gracias!

Respuestas:


9

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 de arranque apropiado. No puedo recordar los números reales, pero un gran porcentaje de tiempo por cada solicitud de 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.


Gracias por el aporte. Estaré buscando más en el módulo de migración y ese drupal_boostrap también fue un gran consejo;)
electblake

8

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. Hay una buena presentación de lote vs. cola aquí 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 tratar de optimizarlo.


2

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


1

Si puede hacerlo paralelo, es un buen comienzo. Estos son 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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.