Laravel - Mit beiden Transaktion und Warteschlange für big data

Ich habe 2 Tabellen. Die Daten können eingefügt werden, um die erste Tabelle. Aber die zweite hätte man 999999 Datensätze eingefügt werden. So, Da sind Sie miteinander verwandt, die ich verwendet, DB::beginTransaction() zu haben, integriert die Daten. Jedoch, weil es viele Platten eingelegt werden, um die zweite Tabelle, also ich wollte Warteschlange, um nicht unter Druck zu setzen, auf dem server. Das problem ist jetzt, dass wenn ich DB::commit(), nachdem er in der Warteschlange job, es zu Begehen, und anderen jobs, die sind der rest einfügen von Datensätzen wird nicht ausgeführt. Wenn ich DB::commit() innerhalb der job-Klasse, es wird nicht funktionieren, weil das erste mal, es läuft zu Begehen, es wird nicht ausgeführt, zum zweiten mal.

Also, wie kann ich das einfügen Haufen Daten mit der Transaktion und in der Warteschlange befindliche job?

Mein code:

DB::beginTransaction();
try {
    $tableOne = new ModelOne();
    $tableOne->column_one = 'value x';
    $tableOne->save();

    $recordsToBeInserted = User::all();
    if(count($recordsToBeInserted) > 500) {
        JobOne::dispatch($recordsToBeInserted);
    } else {
        foreach($recordsToBeInserted as $record) {
            ModelTwo::create([
                'column_one' => 'value y',
                'table_one_id' => $tableOne->id,
            ]);
        }

        DB::commit();
    }

    return 'success!';
} catch (Exception $e) {
    DB::rollback();

    return 'Err!';
}


class JobOne implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $recordsToBeInserted;

    public function __construct($recordsToBeInserted)
    {
        $this->recordsToBeInserted = $recordsToBeInserted;
    }

    public function handle()
    {
        foreach($this->recordsToBeInserted->chunk(500) as $record) {
            ModelTwo::create([
                'column_one' => 'value y',
                'table_one_id' => $record->id,
            ]);
        }

        DB::commit();
    }
}
0
2019-09-17 08:20:07
Quelle
0 Antworten

Sehen Sie sich andere Fragen zu Tags an