laravel-performance/app/Tasks/Mass/MassInsert/MassInsert5Task.php

52 lines
1.4 KiB
PHP

<?php
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Illuminate\Support\Facades\DB;
class MassInsert5Task
{
/**
* insert unit block with transaction
*
* 100 ............ 0,040 s DONE
* 1_000 ............ 0,343 s DONE
* 10_000 ............ 3,000 s DONE
* 100_000 ........... 34,000 s DONE
* 1000000
*
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
* 2. insert into transactions (id, value, date) values (2, 20, '2023-04-02');
* .... 1.000 commit
* - reconstroi os indices, verifica chave, view materializada
*
* 1001. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
* 1002. insert into transactions (id, value, date) values (2, 20, '2023-04-02');
* .... 1.000 commit
* - reconstroi os indices, verifica chave, view materializada
*
*/
public function handle(int $count): void
{
$block = 1000;
while ($count > 0) {
if ($count < $block) {
$block = $count;
}
DB::beginTransaction();
try {
Transaction::factory($block)->create();
DB::commit();
$count -= $block;
} catch (\Exception $exception) {
DB::rollBack();
}
}
}
}