51 lines
1.2 KiB
PHP
51 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Tasks\Mass\MassInsert;
|
|
|
|
use App\Models\Transaction;
|
|
|
|
class MassInsert3Task
|
|
{
|
|
|
|
/**
|
|
* insert multiple block
|
|
*
|
|
* insert into values ( ...), (....), ... 1000
|
|
* commit
|
|
*
|
|
* insert into values ( ...), (....), ... 1000
|
|
* commit
|
|
*
|
|
* insert into values ( ...), (....), ... 1000
|
|
* commit
|
|
*
|
|
* 100 ............ 0,015 s DONE
|
|
* 1_000 ............ 0,087 s DONE
|
|
* 10_000 ............ 0,795 s DONE
|
|
* 100_000 ............ 8,000 s DONE
|
|
* 1_000_000 ........... 87,000 s DONE (1m 27s)
|
|
*
|
|
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
|
|
* - index, view materialized
|
|
*
|
|
* 2. insert into transactions (id, value, date) values (2, 20, '2023-04-02');
|
|
* - index, view materialized
|
|
*/
|
|
public function handle(int $count): void
|
|
{
|
|
$block = 1000;
|
|
while ($count > 0) {
|
|
|
|
if ($count < $block) {
|
|
$block = $count;
|
|
}
|
|
|
|
$transactions = Transaction::factory($block)->make();
|
|
Transaction::query()->insert($transactions->toArray());
|
|
|
|
|
|
$count -= $block;
|
|
}
|
|
}
|
|
}
|