จะเพิ่มความเร็วในการปฏิบัติการ Batch API ได้อย่างไร


12

ฉันเคยพบเจอสิ่งนี้ทั้งกับโมดูล contrib ของบุคคลที่สามรวมถึงการดำเนินการบางอย่างของฉันเอง ฉันอยากรู้วิธีการต่าง ๆ เพื่อเร่งความเร็วการดำเนินการชุด / contrib ของฉันได้อย่างไร

สมมติว่าพวกเขาทำงานกับโหนด (นำเข้า / อัพเดท ฯลฯ ) และเรากำลังจัดการกับการแยกรายการของโหนดในช่วง 10,000+ (แม้ว่าฉันจะต้องจัดการกับ 15 ล้านแถว .. ซึ่งใช่ - ฉันแค่เมา .)

มันเร็วกว่าที่จะแนบกับงาน drupals cron.php และเรียกใช้ "หัวขาด" หรือไม่? ใช้ Drush ไหม หรือนี่เป็นเพียงคำถามว่าการแยกวิเคราะห์อย่างมีประสิทธิภาพและรวดเร็วฉันสามารถพัฒนาโค้ดของฉันได้อย่างไรและไม่มีอิทธิพลจากภายนอกหรือเคล็ดลับการเพิ่มประสิทธิภาพแบบเฉพาะเจาะจง ...

ขณะนี้ฉันพบการทำงานที่ (ใช้การคำนวณคร่าวๆ) อาจใช้เวลา 24+ ชั่วโมง ...

ขอบคุณ!

คำตอบ:


9

วิธีนี้ใช้ไม่ได้กับรหัส contrib แต่ถ้าเป็นรหัสของคุณและคุณรู้ดีฉันแนะนำให้เขียนคำสั่ง drush เพื่อใช้งาน ภายในdrush ให้จำกัดdrupal_bootstrap () เป็นระดับ bootstrap ที่เหมาะสม ฉันจำตัวเลขที่แท้จริงไม่ได้ แต่ใช้เวลาส่วนใหญ่ในการบู๊ต drupal ทุกครั้งและคุณสามารถประหยัดเวลาได้มาก

นอกจากนี้ตรวจสอบความกล้าของโมดูลโอนย้าย ฉันไม่ทราบว่ามันเป็นอย่างไร mojo (ไม่เคยใช้เวลาในการคลาน) แต่มันสามารถลุกโชนผ่านกลุ่มของโหนดขนาดใหญ่ได้อย่างรวดเร็ว


ขอบคุณสำหรับอินพุต - ฉันจะดูโมดูลการย้ายข้อมูลเพิ่มเติมและ drupal_boostrap นั้นเป็นคำแนะนำที่ดีเช่นกัน;)
electblake

8

การเรียกชุดงานทุกครั้งเป็นการร้องขอ HTTP ดังนั้นคุณต้องหาส่วนผสมที่ลงตัวของจำนวนการวนซ้ำที่คุณสามารถประมวลผลก่อนที่จะมีการร้องขอ HTTP อื่น สองสิ่งที่ควรพิจารณาคือหน่วยความจำและเวลาดำเนินการสูงสุด คุณจะต้องดำเนินการซ้ำให้มากที่สุดเท่าที่เป็นไปได้ต่อแบทช์เพื่อลดจำนวนคำขอ HTTP เนื่องจากเป็นสาเหตุของแบทช์ที่ช้าที่สุดของคุณ

หากชุดของคุณหนักเกินไปที่จะทำงานอย่างมีประสิทธิภาพคุณสามารถลองใช้คิวแทน มีดีชุดเทียบกับการนำเสนอคิวนี่คือhttp://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown คิวไม่ได้ให้คำติชมของผู้ใช้และสามารถทำงานแบบขนาน

หากคุณต้องการคำติชมจากผู้ใช้คุณเชื่อมโยงกับแบทช์ แต่คุณสามารถใช้คิวในแบตช์ของคุณเพื่อพยายามปรับให้เหมาะสม


2

อย่างที่คนอื่น ๆ บอกว่า Drush เป็นทางออกที่ดี แต่คิวเป็นเครื่องมือที่ยอดเยี่ยมในการใช้งาน Batch API ใน Drupal 7 ใช้ core Queue API ในตัวดังนั้นหากคุณใช้ MySQL กระบวนการของคุณอาจมีปัญหาคอขวด แต่ Queue API ของ Drupal 7 นั้นสามารถเสียบได้ดังนั้นคุณสามารถใช้ระบบคิวอื่นเช่น beanstalkd


1

หากคุณสามารถทำให้มันขนานนั่นเป็นการเริ่มต้นที่ดี นี่คือความคิดของฉันบางอย่างเกี่ยวกับเรื่องนี้เพราะฉันเคยใช้ 4 กระทู้ในการรวบรวมข้อมูลมากกว่าหนึ่งล้านหน้าก่อนหน้านี้ (ผ่านการเพิ่มประสิทธิภาพ) กำลังมองหาการทำให้เป็นลักษณะทั่วไปตอนนี้ http://groups.drupal.org/node/126624

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.