Meine Benutzer müssen in der Lage sein, Dateien auf meine Website hochzuladen, also habe ich ein Datei-Uploader-Widget auf dem Frontend implementiert. Es ermöglicht mehrere Uploads gleichzeitig und jeder Upload löst jeweils eine Datei aus, um die Datei in der Datenbank zu speichern.Ich treffe eine Race Condition in meiner Laravel-Anwendung, wenn ich versuche, INSERT oder UPDATE, irgendwelche Vorschläge ... einzugeben?
Das Problem ist, dass Dateien als ein Array in einer einzigen Zeile in der Datenbank gespeichert werden müssen (ich weiß, ich weiß ... Legacy-Gründe).
In Englisch Pseudo-Code, hier ist was geschieht:
- Laravel eine neue Datei
- Laravel prüft, ob irgendwelche Dateien (überhaupt) wurden zu dieser Entität hochgeladen wurde sieht Nein Dateien wurden bereits hochgeladen? Erstellen Sie einen neuen Datensatz, um diese Datei zu speichern.
- Es gibt bereits Dateien für diese Entität? Aktualisieren Sie den vorhandenen Datensatz, um diese Datei dem Array hinzuzufügen.
Das Problem ist, dass, wenn mehrere Dateien auf einmal in schnellen Folge zum ersten Mal hochgeladen werden, Laravel der ersten Datei in der Datenbank Momenten nach der zweiten Datei durchgeführt eingegeben hat, hat es zu überprüfen, ob alle Dateien, um zu sehen, existieren bereits. Wir haben also doppelte Zeilen, anstatt sie in einem einzigen Datensatz zu aktualisieren.
Wenn ich 5 Dateien auf einmal hochlade, bekomme ich normalerweise 4 Zeilen in der Datenbank - 3 einzelne Einträge und einen doppelten Eintrag, die es geschafft haben, rechtzeitig aufzuholen.
Irgendwelche praktischen Möglichkeiten, um dieses Problem zu umgehen? Ich weiß, dass ich hier ein ND-Schema verwenden sollte, aber ich habe eine bereits komplexe Situation der Kürze halber stark vereinfacht!
Dies ist Laravel 5.2 mit einer MySQL InnoDB-Datenbank.