PrimaryKey

main
Johnathan Douglas 2023-07-27 09:52:07 -03:00
parent c9abf00c8c
commit 3b00eca43b
56 changed files with 801 additions and 231 deletions

View File

@ -144,9 +144,9 @@ php artisan queue:work --queue=default
Atualizar um campo ou mais, para o mesmo grupo.
- [MassUpdate1](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassUpdate/Group1/MassUpdate1Task.php)
- [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/MassUpdate/Group1/MassUpdate2Task.php)
- [MassUpdate2](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group1/MassUpdate2Task.php)
- `using whereIn`
### Result
@ -175,13 +175,13 @@ Atualizar um campo ou mais, para o mesmo grupo.
Atualizar um campo ou mais diferente para cada transação.
- [MassUpdate3](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/MassUpdate/Group2/MassUpdate3Task.php)
- [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/MassUpdate/Group2/MassUpdate4Task.php)
- [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/MassUpdate/Group2/MassUpdate5Task.php) ([lib mass-update](https://github.com/johdougss/laravel-mass-update))
- [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/MassUpdate/Group2/MassUpdate6Task.php)
- [MassUpdate6](https://gitea.nteia.com/johdougss/laravel-performance/src/branch/main/app/Tasks/Mass/MassUpdate/Group2/MassUpdate6Task.php)
- `using with select update`
### Result

View File

@ -1,10 +1,8 @@
<?php
namespace App\Console\Commands;
namespace App\Console\Commands\Mass;
use App\Jobs\MassInsert;
use App\Jobs\MassDelete;
use App\Tasks\MassInsert\MassInsert3Task;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Bus;
@ -33,9 +31,9 @@ class MassDeleteCommand extends Command
$count = (int)$this->option('count');
Bus::chain([
(new MassDelete\MassDelete1Job($count)),
(new MassDelete\MassDelete2Job($count)),
(new MassDelete\MassDelete3Job($count)),
(new \App\Jobs\Mass\MassDelete\MassDelete1Job($count)),
(new \App\Jobs\Mass\MassDelete\MassDelete2Job($count)),
(new \App\Jobs\Mass\MassDelete\MassDelete3Job($count)),
])->dispatch();
}
}

View File

@ -1,8 +1,8 @@
<?php
namespace App\Console\Commands;
namespace App\Console\Commands\Mass;
use App\Jobs\MassInsert;
use App\Jobs\Mass\MassInsert;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Bus;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Console\Commands;
namespace App\Console\Commands\Mass;
use App\Jobs\MassUpdate\Group1;
use App\Jobs\MassUpdate\Group2;
@ -35,18 +35,18 @@ class MassUpdateCommand extends Command
private function group1(): void
{
Bus::chain([
new Group1\MassUpdate1Job(),
new Group1\MassUpdate2Job(),
new \App\Jobs\Mass\MassUpdate\Group1\MassUpdate1Job(),
new \App\Jobs\Mass\MassUpdate\Group1\MassUpdate2Job(),
])->dispatch();
}
private function group2()
{
Bus::chain([
new Group2\MassUpdate3Job(),
new \App\Jobs\Mass\MassUpdate\Group2\MassUpdate3Job(),
// new Group2\MassUpdate4Job(),
// new Group2\MassUpdate5Job(),
new Group2\MassUpdate6Job(),
new \App\Jobs\Mass\MassUpdate\Group2\MassUpdate6Job(),
])->dispatch();
}
}

View File

@ -0,0 +1,57 @@
<?php
namespace App\Console\Commands\Mass;
use App\Jobs\MassUpsert;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Bus;
class MassUpsertCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:mass-upsert
{--count=100: number of rows inserted}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'mass upsert';
/**
* Execute the console command.
*/
public function handle()
{
$count = (int)$this->option('count');
Bus::chain([
(new \App\Jobs\Mass\MassUpsert\MassUpsert1Job($count)),
(new \App\Jobs\Mass\MassUpsert\MassUpsert2Job($count)),
])->dispatch();
}
}

View File

@ -0,0 +1,59 @@
<?php
namespace App\Console\Commands\PrimaryKey;
use App\Jobs\MassUpdate\Group1;
use App\Jobs\MassUpdate\Group2;
use App\Jobs\PrimaryKey\ProductsBigInt1Job;
use App\Jobs\PrimaryKey\ProductsUuid1Job;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Bus;
class PrimaryKeyCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:primary-key
{--count=100: number of rows inserted}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'mass update';
/**
* Execute the console command.
*/
public function handle()
{
$count = (int)$this->option('count');
Bus::chain([
(new ProductsBigInt1Job($count)),
(new ProductsUuid1Job($count)),
])->dispatch();
}
}

View File

@ -1,10 +1,8 @@
<?php
namespace App\Jobs\MassDelete;
namespace App\Jobs\Mass\MassDelete;
use App\Tasks\MassDelete\MassDelete1Task;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassDelete\MassDelete1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -20,7 +18,7 @@ class MassDelete1Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,11 +1,8 @@
<?php
namespace App\Jobs\MassDelete;
namespace App\Jobs\Mass\MassDelete;
use App\Tasks\MassDelete\MassDelete1Task;
use App\Tasks\MassDelete\MassDelete2Task;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassDelete\MassDelete2Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -21,7 +18,7 @@ class MassDelete2Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,12 +1,8 @@
<?php
namespace App\Jobs\MassDelete;
namespace App\Jobs\Mass\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 App\Tasks\Mass\MassDelete\MassDelete3Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -22,7 +18,7 @@ class MassDelete3Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,9 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -19,7 +18,7 @@ class MassInsert1Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,10 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassInsert\MassInsert2Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert2Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -20,7 +18,7 @@ class MassInsert2Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,11 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassInsert\MassInsert2Task;
use App\Tasks\MassInsert\MassInsert3Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert3Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -21,7 +18,7 @@ class MassInsert3Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,12 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassInsert\MassInsert2Task;
use App\Tasks\MassInsert\MassInsert3Task;
use App\Tasks\MassInsert\MassInsert4Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert4Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -22,7 +18,7 @@ class MassInsert4Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,13 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassInsert\MassInsert2Task;
use App\Tasks\MassInsert\MassInsert3Task;
use App\Tasks\MassInsert\MassInsert4Task;
use App\Tasks\MassInsert\MassInsert5Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert5Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -23,7 +18,7 @@ class MassInsert5Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,14 +1,8 @@
<?php
namespace App\Jobs\MassInsert;
namespace App\Jobs\Mass\MassInsert;
use App\Tasks\MassInsert\MassInsert1Task;
use App\Tasks\MassInsert\MassInsert2Task;
use App\Tasks\MassInsert\MassInsert3Task;
use App\Tasks\MassInsert\MassInsert4Task;
use App\Tasks\MassInsert\MassInsert5Task;
use App\Tasks\MassInsert\MassInsert6Task;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassInsert\MassInsert6Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -24,7 +18,7 @@ class MassInsert6Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassInsertRelationship;
namespace App\Jobs\Mass\MassInsertRelationship;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Jobs\MassInsertRelationship\InsertMassiveRelationship1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class InsertMassiveRelationship1Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group1;
namespace App\Jobs\Mass\MassUpdate\Group1;
use App\Tasks\MassUpdate\Group1\MassUpdate1Task;
use App\Tasks\Mass\MassUpdate\Group1\MassUpdate1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate1Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group1;
namespace App\Jobs\Mass\MassUpdate\Group1;
use App\Tasks\MassUpdate\Group1\MassUpdate2Task;
use App\Tasks\Mass\MassUpdate\Group1\MassUpdate2Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate2Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group2;
namespace App\Jobs\Mass\MassUpdate\Group2;
use App\Tasks\MassUpdate\Group2\MassUpdate3Task;
use App\Tasks\Mass\MassUpdate\Group2\MassUpdate3Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate3Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group2;
namespace App\Jobs\Mass\MassUpdate\Group2;
use App\Tasks\MassUpdate\Group2\MassUpdate4Task;
use App\Tasks\Mass\MassUpdate\Group2\MassUpdate4Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate4Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group2;
namespace App\Jobs\Mass\MassUpdate\Group2;
use App\Tasks\MassUpdate\Group2\MassUpdate5Task;
use App\Tasks\Mass\MassUpdate\Group2\MassUpdate5Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate5Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -1,8 +1,8 @@
<?php
namespace App\Jobs\MassUpdate\Group2;
namespace App\Jobs\Mass\MassUpdate\Group2;
use App\Tasks\MassUpdate\Group2\MassUpdate6Task;
use App\Tasks\Mass\MassUpdate\Group2\MassUpdate6Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -18,7 +18,7 @@ class MassUpdate6Job implements ShouldQueue
*
* @var int
*/
public $timeout = 3600; //20min
public int $timeout = 3600; //20min
/**
* Create a new job instance.

View File

@ -0,0 +1,38 @@
<?php
namespace App\Jobs\Mass\MassUpsert;
use App\Tasks\Mass\MassUpsert\MassUpsert1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class MassUpsert1Job implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public int $timeout = 3600; //20min
/**
* Create a new job instance.
*/
public function __construct(public int $count)
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
(new MassUpsert1Task())->handle($this->count);
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace App\Jobs\Mass\MassUpsert;
use App\Tasks\Mass\MassUpsert\MassUpsert2Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class MassUpsert2Job implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public int $timeout = 3600; //20min
/**
* Create a new job instance.
*/
public function __construct(public int $count)
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
(new MassUpsert2Task())->handle($this->count);
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace App\Jobs\PrimaryKey;
use App\Tasks\Mass\MassDelete\MassDelete1Task;
use App\Tasks\PrimaryKey\ProductsBigInt1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProductsBigInt1Job implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public int $timeout = 3600; //20min
/**
* Create a new job instance.
*/
public function __construct(public int $count)
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
(new ProductsBigInt1Task())->handle($this->count);
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Jobs\PrimaryKey;
use App\Tasks\Mass\MassDelete\MassDelete1Task;
use App\Tasks\PrimaryKey\ProductsBigInt1Task;
use App\Tasks\PrimaryKey\ProductsUuid1Task;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProductsUuid1Job implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public int $timeout = 3600; //20min
/**
* Create a new job instance.
*/
public function __construct(public int $count)
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
(new ProductsUuid1Task())->handle($this->count);
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property int id
* @property string name
*/
class ProductBigInt extends Model
{
use HasFactory;
protected $table = 'products_big_int';
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
];
}

View File

@ -0,0 +1,45 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property int id
* @property string name
*/
class ProductUuid extends Model
{
use HasFactory;
public $incrementing = false;
protected $table = 'products_uuid';
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
];
}

View File

@ -1,12 +1,9 @@
<?php
namespace App\Tasks\MassDelete;
namespace App\Tasks\Mass\MassDelete;
use App\Models\Transaction;
use App\Tasks\MassInsert\MassInsert3Task;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use App\Tasks\Mass\MassInsert\MassInsert3Task;
class MassDelete1Task
{
@ -14,11 +11,11 @@ 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)
* 100 ............ 0,303 s DONE
* 1_000 ............ 2,000 s DONE
* 10_000 ........... 27,000 s DONE
* 100_000 .......... 149,000 s DONE (2m 29s)
* 1_000_000 ......... 1644,000 s DONE (27m 24s)
*/
public function handle(int $count): void
{

View File

@ -1,12 +1,10 @@
<?php
namespace App\Tasks\MassDelete;
namespace App\Tasks\Mass\MassDelete;
use App\Models\Transaction;
use App\Tasks\MassInsert\MassInsert3Task;
use Carbon\Carbon;
use App\Tasks\Mass\MassInsert\MassInsert3Task;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
class MassDelete2Task
{
@ -14,11 +12,11 @@ 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)
* 100 ............ 0,018 s DONE
* 1_000 ............ 0,105 s DONE
* 10_000 ............ 0,938 s DONE
* 100_000 ........... 10,000 s DONE
* 1_000_000 .......... 109,000 s DONE (1m 49s)
*/
public function handle(int $count): void
{

View File

@ -0,0 +1,27 @@
<?php
namespace App\Tasks\Mass\MassDelete;
use App\Tasks\Mass\MassInsert\MassInsert3Task;
use Illuminate\Support\Facades\DB;
class MassDelete3Task
{
/**
* insert unit
*
* 100 ............ 0,013 s DONE
* 1_000 ............ 0,092 s DONE
* 10_000 ............ 0,812 s DONE
* 100_000 ............ 8,000 s DONE
* 1_000_000 ........... 91,000 s DONE (1m 31s)
*
*/
public function handle(int $count): void
{
DB::beginTransaction();
(new MassInsert3Task())->handle($count);
DB::rollBack();
}
}

View File

@ -1,10 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassInsert1Task
{
@ -12,11 +10,11 @@ class MassInsert1Task
/**
* insert unit
*
* 100 ............ 0,166 s DONE
* 1000 ............ 1,000 s DONE
* 10000 ........... 13,000 s DONE
* 100000 .......... 163,000 s DONE
* 1000000 ..........1506,000 s DONE (25m 6s)
* 100 ............ 0,166 s DONE
* 1_000 ............ 1,000 s DONE
* 10_000 ........... 13,000 s DONE
* 100_000 .......... 163,000 s DONE
* 1_000_000 ..........1506,000 s DONE (25m 6s)
*
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');
* - index, view materialized

View File

@ -1,11 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use PHPUnit\Event\Runtime\PHP;
class MassInsert2Task
{
@ -13,11 +10,11 @@ class MassInsert2Task
/**
* insert multiple
*
* 100 ............ 0,015 s DONE
* 1000 ............ 0,087 s DONE
* 10000 ............ 0,789 s DONE
* 100000 - SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535
* 1000000 - SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535
* 100 ............ 0,015 s DONE
* 1_000 ............ 0,087 s DONE
* 10_000 ............ 0,789 s DONE
* 100_000 - SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535
* 1_000_000 - SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535
*/
public function handle(int $count): void
{

View File

@ -1,10 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassInsert3Task
{
@ -21,11 +19,11 @@ class MassInsert3Task
* insert into values ( ...), (....), ... 1000
* commit
*
* 100 ............ 0,015 s DONE
* 1000 ............ 0,087 s DONE
* 10000 ............ 0,795 s DONE
* 100000 ............ 8,000 s DONE
* 1000000 ........... 87,000 s DONE (1m 27s)
* 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

View File

@ -1,9 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassInsert4Task
@ -12,11 +11,11 @@ class MassInsert4Task
/**
* insert unit with transaction
*
* 100 ............ 0,044 s DONE
* 1000 ............ 0,352 s DONE
* 10000 ............ 3,000 s DONE
* 100000 ........... 35,000 s DONE
* 1000000 .......... 391,000 s DONE (6m 31s)
* 100 ............ 0,044 s DONE
* 1_000 ............ 0,352 s DONE
* 10_000 ............ 3,000 s DONE
* 100_000 ........... 35,000 s DONE
* 1_000_000 .......... 391,000 s DONE (6m 31s)
*
* 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');

View File

@ -1,9 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassInsert5Task
@ -12,10 +11,10 @@ class MassInsert5Task
/**
* insert unit block with transaction
*
* 100 ............ 0,040 s DONE
* 1000 ............ 0,343 s DONE
* 10000 ............ 3,000 s DONE
* 100000 ........... 34,000 s DONE
* 100 ............ 0,040 s DONE
* 1_000 ............ 0,343 s DONE
* 10_000 ............ 3,000 s DONE
* 100_000 ........... 34,000 s DONE
* 1000000
*
* 1. insert into transactions (id, value, date) values (1, 10, '2023-04-01');

View File

@ -1,9 +1,8 @@
<?php
namespace App\Tasks\MassInsert;
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassInsert6Task
@ -21,11 +20,11 @@ class MassInsert6Task
*
* EXECUTE transactions_plan(23.44, '2023-01-05 00:00:00'::timestamp);
*
* 100 ............ 0,125 s DONE
* 1000 ............ 1,000 s DONE
* 10000 ........... 11,000 s DONE
* 100000 .......... 147,000 s DONE
* 1000000 ........ 1.250,000 s DONE (20m 50s)
* 100 ............ 0,125 s DONE
* 1_000 ............ 1,000 s DONE
* 10_000 ........... 11,000 s DONE
* 100_000 .......... 147,000 s DONE
* 1_000_000 ........ 1.250,000 s DONE (20m 50s)
*
* @param mixed $count
* @return void

View File

@ -1,10 +1,9 @@
<?php
namespace App\Tasks\MassUpdate\Group1;
namespace App\Tasks\Mass\MassUpdate\Group1;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class MassUpdate1Task
{
@ -12,10 +11,10 @@ class MassUpdate1Task
* Atualiza o campo data e valor, uma transação por vez.
* Atualizando de forma unitária com where('id', 1), where('id', 2).
*
* 1000 .......... 1s DONE
* 10000 .......... 14s DONE
* 100000 ....... 2m 36s DONE
* 1000000 ...... 26m 10s DONE
* 1_000 .......... 1s DONE
* 10_000 .......... 14s DONE
* 100_000 ....... 2m 36s DONE
* 1_000_000 ...... 26m 10s DONE
*/
public function handle()
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Tasks\MassUpdate\Group1;
namespace App\Tasks\Mass\MassUpdate\Group1;
use App\Models\Transaction;
use Carbon\Carbon;
@ -11,10 +11,10 @@ class MassUpdate2Task
* Atualiza o campo data e valor, mas passando todos os ids das transações,
* Atualizando com where id in(1,2,3...).
*
* 1000 ...... 19.87ms DONE
* 10000 ..... 149.19ms DONE
* 100000 ........... 1s DONE
* 1000000 .......... 15s DONE
* 1_000 ...... 19.87ms DONE
* 10_000 ..... 149.19ms DONE
* 100_000 ........... 1s DONE
* 1_000_000 .......... 15s DONE
*/
public function handle()
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Tasks\MassUpdate\Group2;
namespace App\Tasks\Mass\MassUpdate\Group2;
use App\Models\Transaction;
use Carbon\Carbon;
@ -11,10 +11,10 @@ class MassUpdate3Task
* Atualiza o campo data e valor, mas o campo data será preenchido com um valor diferente para cada transação,
* Atualizando de forma unitária com where('id', 1), where('id', 2).
*
* 1000 ........... 1s DONE
* 10000 .......... 14s DONE
* 100000 ....... 2m 44s DONE
* 1000000 ...... 27m 10s DONE
* 1_000 ........... 1s DONE
* 10_000 .......... 14s DONE
* 100_000 ....... 2m 44s DONE
* 1_000_000 ...... 27m 10s DONE
*/
public function handle(): void
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Tasks\MassUpdate\Group2;
namespace App\Tasks\Mass\MassUpdate\Group2;
use App\Database\UpdateMassive4;
use App\Models\Transaction;
@ -13,10 +13,10 @@ class MassUpdate4Task
* Atualiza o campo data e valor, mas o campo data será preenchido com um valor diferente para cada transação,
* Atualizando de forma multipla com MassUpdate
*
* 1000 ..... 85.32ms DONE
* 10000 .... 737.00ms DONE
* 100000 .......... 8s DONE
* 1000000 ...... 1m 15s DONE
* 1_000 ..... 85.32ms DONE
* 10_000 .... 737.00ms DONE
* 100_000 .......... 8s DONE
* 1_000_000 ...... 1m 15s DONE
*/
public function handle(): void
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Tasks\MassUpdate\Group2;
namespace App\Tasks\Mass\MassUpdate\Group2;
use App\Models\Transaction;
use Carbon\Carbon;
@ -13,10 +13,10 @@ class MassUpdate5Task
* Atualiza o campo data e valor, mas o campo data será preenchido com um valor diferente para cada transação,
* Atualizando de forma multipla com UpdateMassive2
*
* 1000 ..... 64.16ms DONE
* 10000 .... 590.20ms DONE
* 100000 .......... 7s DONE
* 1000000 ......... 58s DONE
* 1_000 ..... 64.16ms DONE
* 10_000 .... 590.20ms DONE
* 100_000 .......... 7s DONE
* 1_000_000 ......... 58s DONE
*/
public function handle(): void
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Tasks\MassUpdate\Group2;
namespace App\Tasks\Mass\MassUpdate\Group2;
use App\Models\Transaction;
use Carbon\Carbon;
@ -11,10 +11,10 @@ class MassUpdate6Task
{
/**
*
* 1000 ........... 7s DONE
* 10000 ......... - DONE
* 100000 ......... . - DONE
* 1000000 .......... - DONE
* 1_000 ........... 7s DONE
* 10_000 ......... - DONE
* 100_000 ......... . - DONE
* 1_000_000 .......... - DONE
*/
public function handle(): void
{

View File

@ -0,0 +1,35 @@
<?php
namespace App\Tasks\Mass\MassUpsert;
use App\Models\Transaction;
use Illuminate\Support\Facades\DB;
class MassUpsert1Task
{
/**
* insert unit
*
* 100 .......... DONE
* 1_000 .......... DONE
* 10_000 .......... DONE
* 100_000 .......... DONE
* 1_000_000 .......... DONE
*
*/
public function handle(int $count): void
{
$i = 0;
$transactions = Transaction::factory($count)->make(function () use (&$i) {
return [
'id' => ++$i,
];
});
DB::enableQueryLog();
Transaction::query()->upsert($transactions->toArray(), ['id'], ['id', 'date', 'value']);
DB::getQueryLog();
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace App\Tasks\Mass\MassUpsert;
use App\Models\Transaction;
class MassUpsert2Task
{
/**
* insert unit
*
* 100 .......... DONE
* 1_000 .......... DONE
* 10_000 .......... DONE
* 100_000 .......... DONE
* 1_000_000 .......... DONE
*
*/
public function handle(int $count): void
{
$i = 0;
$transactions = Transaction::factory($count)->make(function () use (&$i) {
return [
'id' => ++$i,
];
});
// foreach ($transactions as $key => $transaction) {
// $transaction->id = $key + 1;
// }
// $exists = Transaction::query()
// ->select(['id'])
// ->whereIn('id', $transactions->pluck('id'))
// ->get()
// ->pluck('id');
//
// foreach ($transactions as $transaction) {
//
// }
}
}

View File

@ -1,30 +0,0 @@
<?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();
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Tasks\PrimaryKey;
use App\Models\ProductBigInt;
use App\Models\Transaction;
class ProductsBigInt1Task
{
/**
* insert unit
*
* 100 ............ 0,021 s DONE
* 1_000 ............ 0,048 s DONE
* 10_000 ............ 0,285 s DONE
* 100_000 ........... 2,000 s DONE
* 1_000_000 ........... 3,000 s DONE
*
*/
public function handle(int $count): void
{
$block = 1000;
while ($count > 0) {
if ($count < $block) {
$block = $count;
}
$products = ProductBigInt::factory($block)->make();
ProductBigInt::query()->insert($products->toArray());
$count -= $block;
}
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace App\Tasks\PrimaryKey;
use App\Models\ProductBigInt;
use App\Models\ProductUuid;
use Illuminate\Support\Str;
class ProductsUuid1Task
{
/**
* insert unit
*
* 100 ............ 0,011 s DONE
* 1_000 ............ 0,041 s DONE
* 10_000 ............ 0,348 s DONE
* 100_000 ............ 3,000 s DONE
* 1_000_000 ........... 30,000 s DONE
*/
public function handle(int $count): void
{
$block = 1000;
while ($count > 0) {
if ($count < $block) {
$block = $count;
}
$products = ProductUuid::factory($block)->make(function () {
return [
'id' => Str::uuid(),
];
});
ProductUuid::query()->insert($products->toArray());
$count -= $block;
}
}
}

View File

@ -2,10 +2,11 @@
namespace Database\Factories;
use App\Models\Category;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
* @extends Factory<Category>
*/
class CategoryFactory extends Factory
{

View File

@ -0,0 +1,25 @@
<?php
namespace Database\Factories;
use App\Models\ProductBigInt;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends Factory<ProductBigInt>
*/
class ProductBigIntFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->bothify('cat ##??')
];
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace Database\Factories;
use App\Models\ProductUuid;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends Factory<ProductUuid>
*/
class ProductUuidFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->bothify('cat ##??')
];
}
}

View File

@ -2,11 +2,12 @@
namespace Database\Factories;
use App\Models\Transaction;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
* @extends Factory<Transaction>
*/
class TransactionFactory extends Factory
{
@ -18,9 +19,8 @@ class TransactionFactory extends Factory
public function definition(): array
{
return [
// 'id' => Str::uuid(),
'date' => fake()->dateTimeBetween('-30 days'),
'value' => fake()->numerify('####.##')
'value' => fake()->numerify('####.##'),
];
}
}

View File

@ -2,11 +2,12 @@
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
* @extends Factory<User>
*/
class UserFactory extends Factory
{
@ -31,7 +32,7 @@ class UserFactory extends Factory
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'email_verified_at' => null,
]);
}

View File

@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products_big_int', function (Blueprint $table) {
$table->id();
$table->string('name', 20);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('products_big_int');
}
};

View File

@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products_uuid', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name', 20);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('products_uuid');
}
};

View File

@ -2,10 +2,8 @@
namespace Database\Seeders;
use App\Models\Transaction;
use App\Tasks\MassInsert\MassInsert3Task;
use App\Tasks\Mass\MassInsert\MassInsert3Task;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TransactionSeeder extends Seeder
{