laravel-performance/README.md

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 | - |