it-swarm-eu.dev

Jak zrychlit operace Batch API?

Do toho jsem narazil jak s přispívajícími moduly třetích stran, tak s některými z mých vlastních operací. Jsem zvědavý na různé způsoby, jak zrychlit/přispět dávkové operace ?

Předpokládejme, že pracují s uzly (import/aktualizace atd.) A zabýváme se analýzou seznamů uzlů v rozsahu 10 000+ (i když jsem se musel vypořádat s 15 miliony řádků .. což ano - jen jsem zašroubovaný. .)

Je rychlejší připojit se k práci dronů cron.php a spustit „bezhlavý“? Používáte Drush? nebo je to prostě otázka, jak efektivní a rychlý parsování mohu vyvinout svůj kód a existují ne vnější vlivy nebo tipy pro optimalizaci jednotlivých dávek ...

V současné době jsem narazil na operace, které (pomocí nějakého hrubého výpočtu) mohly trvat 24+ hodin ...

Dík!

12
electblake

Toto nefunguje pro kód přispívání, ale pokud je to váš kód a dobře ho znáte, doporučuji k provedení práce napsat příkaz drush. V rámci drush omezte drupal_bootstrap () na příslušnou úroveň bootstrap= úroveň. Nemohu si vzpomenout na skutečná čísla, ale velmi velké procento času za každých drupal žádost je utracena v bootstrapu a můžete tam ušetřit spoustu času.

Dále se podívejte na odvahu modulu Migrace. Nevím, jak to dělá, je to mojo (nikdy jsem si nevzal čas na to, abych si to propadl), ale může to rychle prosvítat obrovskými dávkami uzlů.

9
justintime

Každé dávkové volání je požadavek HTTP. Musíte tedy najít dokonalou kombinaci toho, kolik iterací můžete zpracovat, než se spustí další požadavek HTTP. Dvě věci, které je třeba zvážit, jsou paměť a maximální doba provedení. Budete chtít zpracovat co nejvíce iterací na dávku, abyste snížili počet požadavků HTTP, protože jsou pravděpodobně viníkem vaší pomalé dávky.

Pokud je vaše dávka příliš těžká na efektivní fungování, můžete místo toho zkusit použít frontu. Zde je dobrá prezentace vs dávkové vs. fronty http://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown . Fronty neposkytují zpětnou vazbu od uživatelů a mohou být spuštěny paralelně.

Pokud požadujete zpětnou vazbu od uživatelů, jste vázáni na dávku, ale můžete se pokusit optimalizovat i použití fronty v dávce.

8
Jepedo

Jak říkali ostatní, Drush je dobré řešení, ale fronta je skvělý nástroj k použití. Dávkové API v Drupal 7 používá vestavěné jádro Queue API, takže pokud používáte MySQL, váš proces by tam mohl být omezen. Ale Drupal 7 je Queue) Rozhraní API je připojitelné, takže můžete použít jiný systém front, například beanstalkd.

2
bjeavons

Pokud to zvládnete paralelně, je to dobrý začátek. Zde jsou některé z mých myšlenek na toto, protože jsem použil 4 vlákna pro procházení přes milion stránek dříve (prostřednictvím boost). Vypadá to, že je nyní zobecněn. http://groups.drupal.org/node/126624

1
mikeytown2