Bagaimana cara mempercepat Operasi Batch API?


12

Saya sudah mengalami ini baik dengan modul kontrib pihak ke-3 serta beberapa operasi saya sendiri. Saya ingin tahu tentang berbagai cara untuk mempercepat operasi batch saya / contrib ?

Asumsikan mereka bekerja dengan node (impor / perbarui dll) dan kita berhadapan dengan parsing daftar node dalam kisaran 10.000+ (walaupun saya harus berurusan dengan 15 juta baris .. yang ya - saya hanya mengacaukannya. .)

Apakah lebih cepat melampirkan pekerjaan drupal cron.php dan menjalankan "headless"? Menggunakan Drush? atau apakah ini hanya sebuah pertanyaan tentang seberapa efisien dan cepatnya penguraian saya dapat mengembangkan kode saya dan tidak ada pengaruh luar atau sejumlah kiat pengoptimalan khusus ...

Saat ini saya sudah menjalankan operasi yang (menggunakan beberapa perhitungan kasar) bisa memakan waktu 24+ jam ...

Terima kasih!

Jawaban:


9

Ini tidak berfungsi untuk kode contrib, tetapi jika itu kode Anda dan Anda mengetahuinya dengan baik, saya sarankan menulis perintah drush untuk melakukan pekerjaan itu. Dalam drush, batasi drupal_bootstrap () ke level bootstrap yang sesuai. Saya tidak dapat mengingat angka sebenarnya, tetapi persentase waktu yang sangat besar untuk setiap permintaan drupal dihabiskan dalam bootstrap, dan Anda dapat menghemat banyak waktu di sana.

Selanjutnya, periksa nyali modul Migrasi. Saya tidak tahu bagaimana melakukannya mojo (tidak pernah meluangkan waktu untuk melakukan grok), tetapi ia dapat meretas sejumlah besar node dengan sangat cepat.


Terima kasih atas masukannya - saya akan melihat lebih dalam modul migrasi dan drupal_boostrap juga merupakan tip yang hebat;)
electblake

8

Setiap panggilan batch adalah permintaan HTTP. Jadi, Anda perlu menemukan perpaduan sempurna dari berapa banyak iterasi yang dapat Anda proses sebelum permintaan HTTP lain dipecat. Dua hal yang perlu dipertimbangkan adalah memori dan waktu eksekusi maksimal. Anda akan ingin memproses sebanyak mungkin iterasi per batch untuk mengurangi jumlah permintaan HTTP karena kemungkinan besar penyebabnya adalah batch lambat Anda.

Jika batch Anda terlalu berat untuk berjalan secara efisien, Anda bisa mencoba menggunakan antrian. Ada presentasi batch vs antrian yang baik di sini http://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown . Antrian tidak memberikan umpan balik pengguna dan dapat dijalankan secara paralel.

Jika Anda memerlukan umpan balik pengguna, Anda terikat pada batch, tetapi Anda bahkan bisa menggunakan antrian dalam batch Anda untuk mencoba mengoptimalkannya.


2

Seperti yang dikatakan orang lain, Drush adalah solusi yang baik, tetapi antrian adalah alat yang hebat untuk digunakan. Batch API di Drupal 7 menggunakan API Antrian inti bawaan jadi jika Anda menggunakan MySQL proses Anda bisa macet di sana. Tapi, Antrian API Drupal 7 adalah pluggable, jadi Anda bisa menggunakan sistem antrian lain seperti beanstalkd.


1

Jika Anda bisa membuatnya paralel, itu awal yang baik. Berikut adalah beberapa pemikiran saya tentang ini karena saya telah menggunakan 4 utas untuk merayapi lebih dari satu juta halaman sebelumnya (melalui dorongan). Mencari untuk membuatnya digeneralisasi sekarang. http://groups.drupal.org/node/126624

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.