Wie geht MySQL mit der Sperrwarteschlangenreihenfolge für SELECT ... FOR UPDATE um?MySql

MySQL DBMS-Forum
Guest
 Wie geht MySQL mit der Sperrwarteschlangenreihenfolge für SELECT ... FOR UPDATE um?

Post by Guest »

Ich habe ein Szenario, in dem möglicherweise mehrere Jobs (Job1, Job2 und Job3) gleichzeitig eintreffen und auf serialisierte Weise ausgeführt werden müssen. Ich verwende MySQL mit der InnoDB-Engine und einem Sperrmechanismus mit einer lock_table-Tabelle. Hier ist das Tabellenschema:

Code: Select all

CREATE TABLE lock_table (
key_name VARCHAR(255) NOT NULL,
UNIQUE KEY (key_name)
) ENGINE = InnoDB;

Hier ist der Workflow, den ich erreichen möchte:
  • job1 erhält eine Sperre mit:

Code: Select all

 SELECT * FROM lock_table WHERE key_name = 'resource1' FOR UPDATE;

Dies verhindert, dass andere Jobs auf dieselbe Ressource (Ressource1) zugreifen, bis Job1 abgeschlossen ist.
  • Während Job1 ausgeführt wird, fordern Job2 und Job3 ebenfalls dieselbe Sperre an:

Code: Select all

SELECT * FROM lock_table WHERE key_name = 'resource1' FOR UPDATE;
Diese Jobs sollten warten, bis Job1 abgeschlossen ist.
  • Nachdem Job1 abgeschlossen ist, möchte ich die Jobs haben in der Warteschlange (Job2 und Job3), um sie in der Reihenfolge auszuführen, in der sie die Sperre angefordert haben.
Meine Fragen sind:
< ol>
[*]Garantiert der SELECT ... FOR UPDATE-Mechanismus von MySQL, dass die Jobs (job2 und job3) werden in der Reihenfolge ausgeführt, in der sie die Sperre angefordert haben?
[*]Gibt es einen offiziellen MySQL-Dokumentationslink, der erklärt, wie MySQL die Reihenfolge von Sperranforderungen in der Warteschlange behandelt?[*]Ist dieser Ansatz die beste Vorgehensweise für die Serialisierung der Jobausführung, oder gibt es einen besseren Weg, dies zu erreichen?

Ich entwerfe eine System, in dem mehrere Jobs (Job1, Job2, Job3 usw.) versuchen können, sie zu verarbeiten dieselbe Ressource gleichzeitig verwenden. Um eine serialisierte Ausführung sicherzustellen, verwende ich MySQLs SELECT ... FOR UPDATE, um die Ressource basierend auf ihrem Schlüsselnamen zu sperren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post