Was ist die Parallelitätskontrolle?
Bei der Datenverwaltungsprogrammierung ist die Parallelitätssteuerung ein Mechanismus, der dafür sorgt, dass bei gleichzeitigen Vorgängen genaue Ergebnisse generiert werden. Diese Ergebnisse müssen auch rechtzeitig erzielt werden. Die Parallelitätskontrolle wird sehr häufig in Datenbanken verwendet, in denen ein Cache mit durchsuchbaren Informationen vorhanden ist, die Benutzer abrufen können.
Programmierer versuchen, eine Datenbank so zu gestalten, dass die Auswirkungen wichtiger Transaktionen auf gemeinsam genutzte Daten seriell gleichwertig sind. Dies bedeutet, dass Daten, die mit Transaktionssätzen Kontakt aufnehmen, sich in einem bestimmten Zustand befinden, in dem die Ergebnisse erhältlich sind, wenn alle Transaktionen seriell und in einer bestimmten Reihenfolge ausgeführt werden. Manchmal sind diese Daten ungültig, da sie von zwei Transaktionen gleichzeitig geändert werden.
Es gibt mehrere Möglichkeiten, um sicherzustellen, dass Transaktionen nacheinander ausgeführt werden, einschließlich der Verwendung des gegenseitigen Ausschlusses sowie der Erstellung einer Ressource, die entscheidet, welche Transaktionen Zugriff haben. Dies ist jedoch ein Overkill und ermöglicht es einem Programmierer nicht, von der Parallelitätskontrolle in einem verteilten System zu profitieren. Die Parallelitätssteuerung ermöglicht die gleichzeitige Ausführung mehrerer Transaktionen, wobei diese Transaktionen voneinander ferngehalten werden, um die Linearisierbarkeit zu gewährleisten. Eine Möglichkeit zur Implementierung der Parallelitätssteuerung ist die Verwendung einer exklusiven Sperre für eine bestimmte Ressource für serielle Transaktionsausführungen, die Ressourcen gemeinsam nutzen. Transaktionen sperren ein Objekt, das verwendet werden soll, und wenn eine andere Transaktion eine Anforderung für das gesperrte Objekt sendet, muss diese Transaktion warten, bis das Objekt entsperrt ist.
Die Implementierung dieser Methode in verteilten Systemen umfasst Sperrenmanager - Server, die Ressourcensperren ausstellen. Dies ist Servern für zentralisierte gegenseitige Ausschlüsse sehr ähnlich, bei denen Clients Sperren anfordern und Nachrichten senden können, um Sperren für eine bestimmte Ressource aufzuheben. Die Beibehaltung der seriellen Ausführung ist jedoch für die Parallelitätskontrolle weiterhin erforderlich. Wenn zwei getrennte Transaktionen auf eine ähnliche Objektgruppe zugreifen, müssen die Ergebnisse ähnlich sein und als ob diese Transaktionen in einer bestimmten Reihenfolge ausgeführt würden. Um die Reihenfolge beim Zugriff auf eine Ressource zu gewährleisten, wird eine zweiphasige Sperre eingeführt. Dies bedeutet, dass Transaktionen keine neuen Sperren erhalten, wenn eine separate Sperre aufgehoben wird.
Bei der zweiphasigen Sperre zur Steuerung des gleichzeitigen Zugriffs wird die Anfangsphase als Wachstumsphase betrachtet, in der die Transaktion die erforderliche Sperre erhält. Die nächste Phase wird als Schrumpfungsphase angesehen, in der die Sperren der Transaktion aufgehoben werden. Bei dieser Art der Verriegelung treten Probleme auf. Wenn Transaktionen abgebrochen werden, verwenden andere Transaktionen möglicherweise Daten von Objekten, die durch abgebrochene Transaktionen geändert und entsperrt wurden. Dies würde dazu führen, dass andere Transaktionen abgebrochen werden.