Optimistisches Sperren unter Verwendung einer Versionsnummer mit DynamoDB unter Verwendung des AWS SDK for .NET Objektpersistenzmodells - Amazon-DynamoDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimistisches Sperren unter Verwendung einer Versionsnummer mit DynamoDB unter Verwendung des AWS SDK for .NET Objektpersistenzmodells

Die Unterstützung der optimistischen Sperre im Object Persistence-Modell stellt sicher, dass die Elementversion für Ihre Anwendung dieselbe ist wie die serverseitige Elementversion, bevor das Element aktualisiert oder gelöscht wird. Angenommen, Sie rufen ein Element für eine Aktualisierung ab. Bevor Sie jedoch Ihre Aktualisierungen zurücksenden, aktualisiert eine andere Anwendung das gleiche Element. Jetzt verfügt Ihre Anwendung über eine veraltete Kopie des Elements. Ohne optimistische Sperre wird jede von Ihnen durchgeführte Aktualisierung die Aktualisierung von anderen Anwendungen überschreiben.

Die Funktion "optimistische Sperre" des Object Persistence-Modells stellt den DynamoDBVersion-Tag bereit, den Sie für die Aktivierung der optimistische Sperre nutzen können. Um diese Funktion zu verwenden, fügen Sie Ihrer Klasse eine Eigenschaft hinzu, mit der die Versionsnummer gespeichert wird. Sie fügen der Eigenschaft das Attribut DynamoDBVersion hinzu. Wenn Sie das Element zum ersten Mal speichern, weist DynamoDBContext diesem eine Versionsnummer hinzu. Dieser Wert wird bei jeder Aktualisierung des Elements inkrementell erhöht.

Ihre Aktualisierungs- oder Löschanforderungen werden nur erfolgreich ausgeführt, wenn die clientseitige Objektversion mit der entsprechenden Versionsnummer des Elements auf der Serverseite übereinstimmt. Wenn Ihre Anwendung über eine veraltete Kopie verfügt, muss sie die aktuelle Version vom Server erhalten, bevor sie das Element aktualisieren oder löschen kann.

Im folgenden C#-Codebeispiel wird die Klasse Book mit Object Persistence-Attributen definiert, die diese der Tabelle ProductCatalog zuordnen. Die Eigenschaft VersionNumber in der Klasse, die das DynamoDBVersion-Attribut aufweist, speichert den Wert der Versionsnummer.

Beispiel
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] //Partition key public int Id { get; set; } [DynamoDBProperty] public string Title { get; set; } [DynamoDBProperty] public string ISBN { get; set; } [DynamoDBProperty("Authors")] public List<string> BookAuthors { get; set; } [DynamoDBVersion] public int? VersionNumber { get; set; } }
Anmerkung

Sie können das DynamoDBVersion-Attribut ausschließlich auf einen löschbaren numerischen primitiven Typen anwenden (z. B. int?).

Die optimistische Sperre hat folgende Auswirkungen auf diese DynamoDBContext-Operationen:

  • Für ein neues Element weist DynamoDBContext die Erstversionsnummer 0 zu. Wenn Sie ein vorhandenes Element abrufen, eine oder mehrere von dessen Eigenschaften aktualisieren und versuchen, die Änderungen zu speichern, wird die Speicheroperation nur dann erfolgreich ausgeführt, wenn die client- und serverseitige Versionsnummer übereinstimmen. DynamoDBContext erhöht die Versionsnummer inkrementell. Sie müssen die Versionsnummer nicht festlegen.

  • Die Methode Delete stellt Überladungen bereit, die entweder einen Primärschlüsselwert oder ein Objekt als Parameter aufnehmen können, wie im folgenden C#-Codebeispiel gezeigt.

    Beispiel
    DynamoDBContext context = new DynamoDBContext(client); ... // Load a book. Book book = context.Load<ProductCatalog>(111); // Do other operations. // Delete 1 - Pass in the book object. context.Delete<ProductCatalog>(book); // Delete 2 - Pass in the Id (primary key) context.Delete<ProductCatalog>(222);

    Wenn Sie ein Objekt als Parameter bereitstellen, ist der Löschvorgang nur dann erfolgreich, wenn die Objektversion mit der entsprechenden serverseitigen Elementversion übereinstimmt. Wenn Sie jedoch einen Primärschlüsselwert als Parameter bereitstellen, erkennt DynamoDBContext keine Versionsnummern und löscht das Element, ohne die Version zu prüfen.

    Beachten Sie, dass die interne Implementierung von optimistischem Sperren im Code des Objektpersistenzmodells die API Aktionen bedingte Aktualisierung und bedingte Löschung in DynamoDB verwendet.

Deaktivieren der optimistischen Sperre

Um die optimistische Sperre zu deaktivieren, verwenden Sie die Konfigurationseigenschaft SkipVersionCheck. Sie können diese Eigenschaft bei der Erstellung von DynamoDBContext festlegen. In diesem Fall wird die optimistische Sperre für alle Anforderungen deaktiviert, die Sie unter Verwendung des Kontextes ausführen. Weitere Informationen finden Sie unter Optionale Parameter für D angeben ynamoDBContext .

Anstatt die Eigenschaft auf der Kontextebene festzulegen, können Sie die optimistische Sperre für eine bestimmte Operation deaktivieren wie im folgenden C#-Codebeispiel gezeigt. Im Beispiel wird der Kontext verwendet, um ein Book-Element zu löschen. Die Methode Delete legt die optionale Eigenschaft SkipVersionCheck auf „true“ fest und deaktiviert damit die Versionsprüfung.

Beispiel
DynamoDBContext context = new DynamoDBContext(client); // Load a book. Book book = context.Load<ProductCatalog>(111); ... // Delete the book. context.Delete<Book>(book, new DynamoDBContextConfig { SkipVersionCheck = true });