Возможно ли многопоточность в laravel 5.5? - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок в laravel и php. Я работаю над проблемой, чтобы вставить большие данные в базу данных, что занимает много времени. Поэтому я думал разделить данные на куски и создать несколько потоков для вставки этих кусков данных. Я использую php 7.2.4 и мой laravel 5.5. Вот мой код here is my code: $row = 1; $contactNumberList = []; if (($handle = fopen($path . "/" . $fileName . "." . $fileExt ."", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $row++; $contact_number = $this->filter_contact($data[0]); if($contact_number != null){ $contactNumberList[] = ['contact_number' => $contact_number]; } } fclose($handle); } //insert records \DB::table('contacts_'. $list_id)->insert($contactNumberList);

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете использовать очереди Laravel. Я цитирую документацию Ларавеля

Очереди Laravel предоставляют единый API для множества различных серверных [...] очередей. Очереди позволяют отложить обработку трудоемкой задачи, такой как отправка электронной почты, до более позднего времени. Откладывание этих трудоемких задач значительно ускоряет веб-запросы к вашему приложению.

Если вы одновременно запускаете нескольких работников очереди , вы можете добиться своего рода "многопоточности" (я знаю, что это не одно и то же, но эффект тот же параллельная обработка)

Вы можете создать команду Artisan , которая разбивает пакет импорта на несколько частей, а затем отправляет несколько очередей , по одному на каждый блок.

Вы не упомянули источник данных, которые вы хотите импортировать, поэтому сложно предоставить более подробные сведения о реализации, но ключ не в том, чтобы отправлять куски данных для каждого задания, а вместо этого предоставить им информация для извлечения данных из пакета самостоятельно. Таким образом, вы не сохраняете огромные объемы данных в своей очереди, которая имеет ограниченную емкость хранения сообщений.

Например, предполагая, что ваши данные поступают из файла, ваша ремесленная команда может прочитать количество строк в файле, разделить его на количество записей на блок, который вы хотите обработать, и создать задание с параметрами, которые указывают, какие строки для обработки из файла.

...