# 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/Mass/MassInsert/MassInsert1Task.php) - `using insert unit` - [MassInsert2](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassInsert/MassInsert2Task.php) - `using insert multiple` - [MassInsert3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassInsert/MassInsert3Task.php) - `using insert multiple block 1000` - [MassInsert4](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassInsert/MassInsert4Task.php) - `using insert unit with transaction` - [MassInsert5](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassInsert/MassInsert5Task.php) - `using insert unit with transaction block 1000` - [MassInsert6](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/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/Mass/MassDelete/MassDelete1Task.php) - `using where` - [MassDelete2](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassDelete/MassDelete2Task.php) - `using whereIn` - [MassDelete3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/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](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/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 | - |