Toplu API İşlemlerini nasıl hızlandırabilirim?


12

Hem 3. taraf katkı modülleriyle hem de kendi operasyonlarımla karşılaştım. Toplu işlemlerimi hızlandırmanın / katkıda bulunmamın çeşitli yollarını merak ediyorum ?

Düğümlerle çalıştıklarını (içe aktarma / güncelleme vb.) Ve 10.000+ aralıktaki düğüm listelerini ayrıştırma ile uğraştığımızı varsayalım (15 milyon satırla uğraşmak zorunda kaldım .. hangi evet - sadece vidalıyım. .)

Drupals cron.php işine eklemek ve "başsız" çalıştırmak daha mı hızlı? Drush mı kullanıyorsunuz? yoksa benim kod geliştirebilir ve orada ne kadar etkili ve hızlı ayrıştırma bu basitçe bir sorudur hiçbir dış etkiler veya toplu özgü optimizasyon ipuçları ...

Şu anda (bazı kaba hesaplama kullanarak) işlemleri içine koşuyoruz olabilir 24+ saat sürer ...

Teşekkürler!

Yanıtlar:


9

Katkı kodu için işe yaramaz, ancak kodunuz ve iyi biliyorsanız, işi yapmak için bir drush komutu yazmanızı öneririm. Drush içinde, sınır drupal_bootstrap uygun önyükleme seviyesine (). Gerçek sayıları hatırlayamıyorum, ancak her drupal istek için çok büyük bir zaman yüzdesi bootstrap'ta harcanıyor ve orada çok zaman kazanabilirsiniz.

Ayrıca, Migrate modülünün bağırsaklarını kontrol edin. Nasıl yapıldığını bilmiyorum mojo (asla grok yapmak için zaman almadı), ancak çok büyük düğüm gruplarından çok hızlı bir şekilde alev alabilir.


Giriş için teşekkürler - Göçmen modülüne daha fazla bakacağım ve drupal_boostrap da harika bir ipucu oldu;)
Electblake

8

Her toplu arama bir HTTP isteğidir. Bu nedenle, başka bir HTTP isteği tetiklenmeden önce kaç yineleme işleyebileceğinizin mükemmel bir karışımını bulmanız gerekir. Dikkate alınması gereken iki şey bellek ve maksimum yürütme süresidir. HTTP isteklerinin sayısını büyük olasılıkla yavaş toplu işiniz için suçlu oldukları için toplu iş başına mümkün olduğunca çok yineleme işlemek isteyeceksiniz.

Toplu işiniz verimli çalışmak için çok ağırsa, bunun yerine bir kuyruk kullanmayı deneyebilirsiniz. Burada iyi bir parti ve kuyruk sunumu var http://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown . Kuyruklar kullanıcı geri bildirimi sağlamaz ve paralel olarak çalıştırılabilir.

Kullanıcı geri bildirimlerine ihtiyacınız varsa, toplu işlemle ilişkili olursunuz, ancak toplu işinizdeki kuyruğu optimize etmek için bile kullanabilirsiniz.


2

Diğerlerinin söylediği gibi Drush iyi bir çözümdür, ancak kuyruk kullanmak için harika bir araçtır. Drupal 7'deki Batch API'sı yerleşik çekirdek Kuyruk API'sını kullanır, bu nedenle MySQL kullanıyorsanız işleminiz orada darboğazlanabilir. Ancak, Drupal 7'nin Kuyruk API'sı takılabilir, böylece beanstalkd gibi başka bir kuyruk sistemi kullanabilirsiniz.


1

Eğer paralel yapabilirsiniz eğer bu iyi bir başlangıç. Daha önce bir milyon sayfanın üzerinde tarama yapmak için 4 konu kullandığımdan (destek yoluyla) bu konudaki düşüncelerimden bazıları. Şimdi genelleştirmek istiyoruz. http://groups.drupal.org/node/126624

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.