Delete
parent
0454016486
commit
b44e727c20
69
README.md
69
README.md
|
@ -32,12 +32,12 @@ php artisan app:mass-insert --count=100
|
||||||
php artisan queue:work --queue=default
|
php artisan queue:work --queue=default
|
||||||
```
|
```
|
||||||
|
|
||||||
[MassInsert1](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert1Task.php),
|
- [MassInsert1](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert1Task.php)
|
||||||
[MassInsert2](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert2Task.php),
|
- [MassInsert2](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert2Task.php)
|
||||||
[MassInsert3](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert3Task.php),
|
- [MassInsert3](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert3Task.php)
|
||||||
[MassInsert4](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert4Task.php),
|
- [MassInsert4](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert4Task.php)
|
||||||
[MassInsert5](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert5Task.php),
|
- [MassInsert5](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert5Task.php)
|
||||||
[MassInsert6](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert6Task.php)
|
- [MassInsert6](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassInsert/MassInsert6Task.php)
|
||||||
|
|
||||||
### Result
|
### Result
|
||||||
|
|
||||||
|
@ -78,13 +78,58 @@ php artisan queue:work --queue=default
|
||||||
| 100.000 | Insert6 | `2m 27s` 147 |
|
| 100.000 | Insert6 | `2m 27s` 147 |
|
||||||
|
|
||||||
| quantity | method | time second |
|
| quantity | method | time second |
|
||||||
|----------:|---------|------------:|
|
|----------:|---------|----------------:|
|
||||||
| 1.000.000 | Insert1 | 1952,320 |
|
| 1.000.000 | Insert1 | `25m 6s` 1506 |
|
||||||
| 1.000.000 | Insert2 | `error` |
|
| 1.000.000 | Insert2 | `error` |
|
||||||
| 1.000.000 | Insert3 | 950,000 |
|
| 1.000.000 | Insert3 | `1m 27s` 87 |
|
||||||
| 1.000.000 | Insert4 | 950,000 |
|
| 1.000.000 | Insert4 | `6m 31s` 391 |
|
||||||
| 1.000.000 | Insert5 | - |
|
| 1.000.000 | Insert5 | `6m 40s` 400 |
|
||||||
| 1.000.000 | Insert6 | - |
|
| 1.000.000 | Insert6 | `20m 50s` 1.250 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Analyse Delete
|
||||||
|
|
||||||
|
```shell
|
||||||
|
php artisan app:mass-delete --count=100
|
||||||
|
php artisan queue:work --queue=default
|
||||||
|
```
|
||||||
|
|
||||||
|
- [MassDelete1](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassDelete/MassDelete1Task.php)
|
||||||
|
- [MassDelete2](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassDelete/MassDelete2Task.php)
|
||||||
|
- [MassDelete3](https://gitea.nteia.com/johdougss/example-update-massive/src/branch/main/app/Tasks/MassDelete/MassDelete3Task.php)
|
||||||
|
|
||||||
|
### Result
|
||||||
|
|
||||||
|
| quantity | method | time seconds |
|
||||||
|
|---------:|---------|-------------:|
|
||||||
|
| 100 | Delete1 | 0,303 |
|
||||||
|
| 100 | Delete2 | 0,015 |
|
||||||
|
| 100 | Delete3 | 0,015 |
|
||||||
|
|
||||||
|
| quantity | method | time seconds |
|
||||||
|
|---------:|---------|-------------:|
|
||||||
|
| 1.000 | Delete1 | 2,000 |
|
||||||
|
| 1.000 | Delete2 | 0,087 |
|
||||||
|
| 1.000 | Delete3 | 0,087 |
|
||||||
|
|
||||||
|
| quantity | method | time seconds |
|
||||||
|
|---------:|---------|-------------:|
|
||||||
|
| 10.000 | Delete1 | 27,000 |
|
||||||
|
| 10.000 | Delete2 | 0,789 |
|
||||||
|
| 10.000 | Delete3 | 0,795 |
|
||||||
|
|
||||||
|
| quantity | method | time seconds |
|
||||||
|
|---------:|---------|-------------:|
|
||||||
|
| 100.000 | Delete1 | `2m 43s` 149 |
|
||||||
|
| 100.000 | Delete2 | `error` |
|
||||||
|
| 100.000 | Delete3 | 8 |
|
||||||
|
|
||||||
|
| quantity | method | time second |
|
||||||
|
|----------:|---------|--------------:|
|
||||||
|
| 1.000.000 | Delete1 | `2m 29s` 1506 |
|
||||||
|
| 1.000.000 | Delete2 | `error` |
|
||||||
|
| 1.000.000 | Delete3 | `1m 27s` 87 |
|
||||||
|
|
||||||
# Analyse Update
|
# Analyse Update
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Jobs\MassInsert;
|
||||||
|
use App\Jobs\MassDelete;
|
||||||
|
use App\Tasks\MassInsert\MassInsert3Task;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Bus;
|
||||||
|
|
||||||
|
class MassDeleteCommand extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'app:mass-delete
|
||||||
|
{--count=100: number of rows inserted}';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'mass insert';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
$count = (int)$this->option('count');
|
||||||
|
|
||||||
|
Bus::chain([
|
||||||
|
(new MassDelete\MassDelete1Job($count)),
|
||||||
|
(new MassDelete\MassDelete2Job($count)),
|
||||||
|
(new MassDelete\MassDelete3Job($count)),
|
||||||
|
])->dispatch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs\MassDelete;
|
||||||
|
|
||||||
|
use App\Tasks\MassDelete\MassDelete1Task;
|
||||||
|
use App\Tasks\MassInsert\MassInsert1Task;
|
||||||
|
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class MassDelete1Job implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of seconds the job can run before timing out.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $timeout = 3600; //20min
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new job instance.
|
||||||
|
*/
|
||||||
|
public function __construct(public int $count)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the job.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
(new MassDelete1Task())->handle($this->count);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs\MassDelete;
|
||||||
|
|
||||||
|
use App\Tasks\MassDelete\MassDelete1Task;
|
||||||
|
use App\Tasks\MassDelete\MassDelete2Task;
|
||||||
|
use App\Tasks\MassInsert\MassInsert1Task;
|
||||||
|
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class MassDelete2Job implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of seconds the job can run before timing out.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $timeout = 3600; //20min
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new job instance.
|
||||||
|
*/
|
||||||
|
public function __construct(public int $count)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the job.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
(new MassDelete2Task())->handle($this->count);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs\MassDelete;
|
||||||
|
|
||||||
|
use App\Tasks\MassDelete\MassDelete1Task;
|
||||||
|
use App\Tasks\MassDelete\MassDelete2Task;
|
||||||
|
use App\Tasks\MassDelete\MassDelete3Task;
|
||||||
|
use App\Tasks\MassInsert\MassInsert1Task;
|
||||||
|
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class MassDelete3Job implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of seconds the job can run before timing out.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $timeout = 3600; //20min
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new job instance.
|
||||||
|
*/
|
||||||
|
public function __construct(public int $count)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the job.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
(new MassDelete3Task())->handle($this->count);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tasks\MassDelete;
|
||||||
|
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use App\Tasks\MassInsert\MassInsert3Task;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class MassDelete1Task
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* insert unit
|
||||||
|
*
|
||||||
|
* 100 ............ 0,303 s DONE
|
||||||
|
* 1000 ............ 2,000 s DONE
|
||||||
|
* 10000 ........... 27,000 s DONE
|
||||||
|
* 100000 .......... 149,000 s DONE (2m 29s)
|
||||||
|
* 1000000 ..........1644,000 s DONE (27m 24s)
|
||||||
|
*/
|
||||||
|
public function handle(int $count): void
|
||||||
|
{
|
||||||
|
(new MassInsert3Task)->handle($count);
|
||||||
|
|
||||||
|
Transaction::query()
|
||||||
|
->select([
|
||||||
|
'id',
|
||||||
|
])
|
||||||
|
->where('id', '>', 0)
|
||||||
|
->chunkById(1000, function ($transactions) {
|
||||||
|
foreach ($transactions as $transaction) {
|
||||||
|
Transaction::query()
|
||||||
|
->where('id', '=', $transaction->id)
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tasks\MassDelete;
|
||||||
|
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use App\Tasks\MassInsert\MassInsert3Task;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class MassDelete2Task
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* insert unit
|
||||||
|
*
|
||||||
|
* 100 ............ 0,018 s DONE
|
||||||
|
* 1000 ............ 0,105 s DONE
|
||||||
|
* 10000 ............ 0,938 s DONE
|
||||||
|
* 100000 ........... 10,000 s DONE
|
||||||
|
* 1000000 .......... 109,000 s DONE (1m 49s)
|
||||||
|
*/
|
||||||
|
public function handle(int $count): void
|
||||||
|
{
|
||||||
|
(new MassInsert3Task)->handle($count);
|
||||||
|
|
||||||
|
Transaction::query()
|
||||||
|
->select([
|
||||||
|
'id',
|
||||||
|
])
|
||||||
|
->where('id', '>', 0)
|
||||||
|
->chunkById(1000, function ($transactions) {
|
||||||
|
/** @var Collection $transactions */
|
||||||
|
Transaction::query()
|
||||||
|
->whereIn('id', $transactions->pluck('id'))
|
||||||
|
->delete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tasks\MassDelete;
|
||||||
|
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use App\Tasks\MassInsert\MassInsert3Task;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class MassDelete3Task
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* insert unit
|
||||||
|
*
|
||||||
|
* 100 ............ 0,013 s DONE
|
||||||
|
* 1000 ............ 0,092 s DONE
|
||||||
|
* 10000 ............ 0,812 s DONE
|
||||||
|
* 100000 ............ 8,000 s DONE
|
||||||
|
* 1000000 ........... 91,000 s DONE (1m 31s)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function handle(int $count): void
|
||||||
|
{
|
||||||
|
DB::beginTransaction();
|
||||||
|
(new MassInsert3Task())->handle($count);
|
||||||
|
DB::rollBack();
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,7 +25,7 @@ class MassInsert3Task
|
||||||
* 1000 ............ 0,087 s DONE
|
* 1000 ............ 0,087 s DONE
|
||||||
* 10000 ............ 0,795 s DONE
|
* 10000 ............ 0,795 s DONE
|
||||||
* 100000 ............ 8,000 s DONE
|
* 100000 ............ 8,000 s DONE
|
||||||
* 1000000
|
* 1000000 ........... 87,000 s DONE (1m 27s)
|
||||||
*
|
*
|
||||||
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
|
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
|
||||||
* - index, view materialized
|
* - index, view materialized
|
||||||
|
|
|
@ -16,7 +16,7 @@ class MassInsert4Task
|
||||||
* 1000 ............ 0,352 s DONE
|
* 1000 ............ 0,352 s DONE
|
||||||
* 10000 ............ 3,000 s DONE
|
* 10000 ............ 3,000 s DONE
|
||||||
* 100000 ........... 35,000 s DONE
|
* 100000 ........... 35,000 s DONE
|
||||||
* 1000000
|
* 1000000 .......... 391,000 s DONE (6m 31s)
|
||||||
*
|
*
|
||||||
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
|
* 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');
|
* 2. insert into transactions (id, value, date) values (2, 20, '2023-04-02');
|
||||||
|
|
|
@ -25,7 +25,7 @@ class MassInsert6Task
|
||||||
* 1000 ............ 1,000 s DONE
|
* 1000 ............ 1,000 s DONE
|
||||||
* 10000 ........... 11,000 s DONE
|
* 10000 ........... 11,000 s DONE
|
||||||
* 100000 .......... 147,000 s DONE
|
* 100000 .......... 147,000 s DONE
|
||||||
* 1000000 .................. - DONE
|
* 1000000 ........ 1.250,000 s DONE (20m 50s)
|
||||||
*
|
*
|
||||||
* @param mixed $count
|
* @param mixed $count
|
||||||
* @return void
|
* @return void
|
||||||
|
|
Loading…
Reference in New Issue