216 lines
7.7 KiB
Markdown
216 lines
7.7 KiB
Markdown
# Install
|
|
|
|
create database `example-update-massive`
|
|
|
|
configure `.env`
|
|
|
|
```dotenv
|
|
DB_CONNECTION=pgsql
|
|
DB_HOST=postgres
|
|
DB_PORT=5432
|
|
DB_DATABASE=example-update-massive
|
|
DB_USERNAME=default
|
|
DB_PASSWORD=secret
|
|
|
|
QUEUE_CONNECTION=database
|
|
|
|
ITEMS_COUNT=10000
|
|
```
|
|
|
|
`ITEMS_COUNT` é a variavel que irá definir quantos registros a fatory irá criar no banco de dados.
|
|
|
|
run migrate;
|
|
|
|
```shell
|
|
php artisan migrate:fresh --seed
|
|
```
|
|
|
|
# Analyse Insert
|
|
|
|
```shell
|
|
php artisan app:mass-insert --count=100
|
|
php artisan queue:work --queue=default
|
|
```
|
|
|
|
- [MassInsert1](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert1Task.php)
|
|
- `using insert unit`
|
|
- [MassInsert2](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert2Task.php)
|
|
- `using insert multiple`
|
|
- [MassInsert3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert3Task.php)
|
|
- `using insert multiple block 1000`
|
|
- [MassInsert4](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert4Task.php)
|
|
- `using insert unit with transaction`
|
|
- [MassInsert5](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert5Task.php)
|
|
- `using insert unit with transaction block 1000`
|
|
- [MassInsert6](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassInsert/MassInsert6Task.php)
|
|
- `using preperate and execute`
|
|
|
|
### Result
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 100 | Insert1 | 0,166 |
|
|
| 100 | Insert2 | 0,015 |
|
|
| 100 | Insert3 | 0,015 |
|
|
| 100 | Insert4 | 0,044 |
|
|
| 100 | Insert5 | 0,040 |
|
|
| 100 | Insert6 | 0,125 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 1.000 | Insert1 | 1,000 |
|
|
| 1.000 | Insert2 | 0,087 |
|
|
| 1.000 | Insert3 | 0,087 |
|
|
| 1.000 | Insert4 | 0,352 |
|
|
| 1.000 | Insert5 | 0,343 |
|
|
| 1.000 | Insert6 | 1,000 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 10.000 | Insert1 | 13,000 |
|
|
| 10.000 | Insert2 | 0,789 |
|
|
| 10.000 | Insert3 | 0,795 |
|
|
| 10.000 | Insert4 | 3,000 |
|
|
| 10.000 | Insert5 | 3,000 |
|
|
| 10.000 | Insert6 | 11,000 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 100.000 | Insert1 | `2m 43s` 163 |
|
|
| 100.000 | Insert2 | `error` |
|
|
| 100.000 | Insert3 | 8 |
|
|
| 100.000 | Insert4 | 35 |
|
|
| 100.000 | Insert5 | 34 |
|
|
| 100.000 | Insert6 | `2m 27s` 147 |
|
|
|
|
| quantity | method | time second |
|
|
|----------:|---------|----------------:|
|
|
| 1.000.000 | Insert1 | `25m 6s` 1506 |
|
|
| 1.000.000 | Insert2 | `error` |
|
|
| 1.000.000 | Insert3 | `1m 27s` 87 |
|
|
| 1.000.000 | Insert4 | `6m 31s` 391 |
|
|
| 1.000.000 | Insert5 | `6m 40s` 400 |
|
|
| 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/laravel-performance/src/branch/main/app/Tasks/MassDelete/MassDelete1Task.php)
|
|
- `using where`
|
|
- [MassDelete2](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassDelete/MassDelete2Task.php)
|
|
- `using whereIn`
|
|
- [MassDelete3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassDelete/MassDelete3Task.php)
|
|
- `using rollback`
|
|
|
|
### Result
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 100 | Delete1 | 0,303 |
|
|
| 100 | Delete2 | 0,018 |
|
|
| 100 | Delete3 | 0,013 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 1.000 | Delete1 | 2,000 |
|
|
| 1.000 | Delete2 | 0,105 |
|
|
| 1.000 | Delete3 | 0,092 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 10.000 | Delete1 | 27,000 |
|
|
| 10.000 | Delete2 | 0,938 |
|
|
| 10.000 | Delete3 | 0,812 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|---------|-------------:|
|
|
| 100.000 | Delete1 | `2m 43s` 149 |
|
|
| 100.000 | Delete2 | 10 |
|
|
| 100.000 | Delete3 | 8 |
|
|
|
|
| quantity | method | time second |
|
|
|----------:|---------|---------------:|
|
|
| 1.000.000 | Delete1 | `27m 24s` 1644 |
|
|
| 1.000.000 | Delete2 | `1m 49s` 109 |
|
|
| 1.000.000 | Delete3 | `1m 31s` 91 |
|
|
|
|
# Analyse Update
|
|
|
|
## Grupo 1:
|
|
|
|
Atualizar um campo ou mais, para o mesmo grupo.
|
|
|
|
- [MassUpdate1](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group1/MassUpdate1Task.php)
|
|
- `using where`
|
|
- [MassUpdate2](app/Tasks/Mass/MassUpdate/Group1/MassUpdate2Task.php)
|
|
- `using whereIn`
|
|
|
|
### Result
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|-------------:|
|
|
| 1.000 | UpdateMassive1Job | 1,00 |
|
|
| 1.000 | UpdateMassive2Job | 0,01 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|-------------:|
|
|
| 10.000 | UpdateMassive1Job | 14,00 |
|
|
| 10.000 | UpdateMassive2Job | 0,14 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|-------------:|
|
|
| 100.000 | UpdateMassive1Job | `2m 36s` 156 |
|
|
| 100.000 | UpdateMassive2Job | 1 |
|
|
|
|
| quantity | method | time seconds |
|
|
|----------:|-------------------|---------------:|
|
|
| 1.000.000 | UpdateMassive1Job | `26m 10s` 1570 |
|
|
| 1.000.000 | UpdateMassive2Job | 15 |
|
|
|
|
## Grupo 2:
|
|
|
|
Atualizar um campo ou mais diferente para cada transação.
|
|
|
|
- [MassUpdate3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group2/MassUpdate3Task.php)
|
|
- `using where`
|
|
- [MassUpdate4](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group2/MassUpdate4Task.php)
|
|
- `using case when`
|
|
- [MassUpdate5](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group2/MassUpdate5Task.php) ([lib mass-update](https://github.com/johdougss/laravel-mass-update))
|
|
- `using values`
|
|
- [MassUpdate6](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group2/MassUpdate6Task.php)
|
|
- `using with select update`
|
|
|
|
### Result
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|-------------:|
|
|
| 1.000 | UpdateMassive3Job | 1,00 |
|
|
| 1.000 | UpdateMassive4Job | 0,08 |
|
|
| 1.000 | UpdateMassive5Job | 0,06 |
|
|
| 1.000 | UpdateMassive6Job | 7,00 |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|-------------:|
|
|
| 10.000 | UpdateMassive3Job | 14,00 |
|
|
| 10.000 | UpdateMassive4Job | 0,73 |
|
|
| 10.000 | UpdateMassive5Job | 0,59 |
|
|
| 10.000 | UpdateMassive6Job | - |
|
|
|
|
| quantity | method | time seconds |
|
|
|---------:|-------------------|----------------:|
|
|
| 100.000 | UpdateMassive3Job | (2m 44s) 164,00 |
|
|
| 100.000 | UpdateMassive4Job | 8,00 |
|
|
| 100.000 | UpdateMassive5Job | 7,00 |
|
|
| 100.000 | UpdateMassive6Job | - |
|
|
|
|
| quantity | method | time seconds |
|
|
|----------:|-------------------|------------------:|
|
|
| 1.000.000 | UpdateMassive3Job | (27m 10s) 1630,00 |
|
|
| 1.000.000 | UpdateMassive4Job | (1m 15s) 75,00 |
|
|
| 1.000.000 | UpdateMassive5Job | 58,00 |
|
|
| 1.000.000 | UpdateMassive6Job | - |
|