Score:0

วิธีจัดการกระบวนการคิวขนาดใหญ่

ธง cn

ฉันใช้ปลั๊กอิน QueueWorker เพื่ออัปเดต/สร้างกระบวนการโหนดในเบื้องหลัง ในพื้นที่ไม่มีปัญหา มันเสร็จสิ้นกระบวนการคิวทั้งหมดอย่างไรก็ตามบนเซิร์ฟเวอร์ aws มักจะหยุดในบางจุด ฉันสันนิษฐานว่าเป็นเพราะการใช้ทรัพยากรบนเซิร์ฟเวอร์ วิธีที่เหมาะสมที่สุดในการเพิ่มประสิทธิภาพ QueueWorker ของฉันคืออะไร

นี่คือรหัสของฉัน:

$offset = 0;

ในขณะที่ (จริง) {
  $nodes= \Drupal::entityQuery('node')->condition('type', 'article')->range($offset, $limit)->execute();

  $offset = $offset + $limit;
  ถ้า (ว่าง ($ โหนด)) {
    หยุดพัก;
  }

  // เริ่มต้น QUEUE
  $queue_manager = \Drupal::service('plugin.manager.queue_worker');
  $queue_worker = $queue_manager->createInstance('ex_queue');
  $queue = $this->queueFactory->get('ex_queue');
  // สร้างรายการ QUEUE
  foreach ($ โหนดเป็น $ โหนด) {
    $item = ใหม่ \stdClass();
    $item->content = $node;
    $queue->createItem($item);
  }
  // ดำเนินการรายการ QUEUE
  ในขณะที่ ($item = $queue->claimItem()) {
    พยายาม {
      $queue_worker->processItem($item->ข้อมูล);
      $queue->deleteItem($item);
    }
    จับ (RequeueException $e) {
      $queue->releaseItem($item);
      \Drupal::logger('system')->warning('RequeueException');
    }
    จับ (SuspendQueueException $e) {
      $queue->releaseItem($item);
      \Drupal::logger('ระบบ')->ข้อผิดพลาด ('SuspendQueueException');
    }
    จับ (\ ข้อยกเว้น $e) {
      $queue->releaseItem($item);
      \Drupal::logger('system')->error('Exception');
    }
  }
}

และ QueueWorker ของฉัน

/**
 * @คิวเวิร์คเกอร์(
 * id = "ex_queue",
 * title = @Translation("ตัวประมวลผลอดีต"),
 * cron = {"เวลา" = 3600}
 * )
 */
คลาส ExQueueProcessor ขยาย QueueWorkerBase ใช้ ContainerFactoryPluginInterface {

  ป้องกัน $configuration;

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ __construct (อาร์เรย์ $configuration) {
    $this->configuration = $configuration;
  }

  /**
   * {@inheritdoc}
   */
  การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
    ส่งคืนค่าคงที่ใหม่ (
      $configuration
    );
  }
       /**
       * {@inheritdoc}
       */
      ฟังก์ชั่นสาธารณะ processItem ($ รายการ) {
        // ทำสิ่งต่างๆ
      }

สมมติว่า จำนวน $nodes ทั้งหมดคือ 17,000 รายการ และหยุดที่ประมาณ 15,000 รายการ มีการเพิ่มประสิทธิภาพมากกว่านี้เพื่อให้จัดการกับข้อมูลขนาดใหญ่หรือไม่?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา