Grundlegendes zur Sitzungsverwaltung mit dem Fahrer in Amazon QLDB - Amazon Quantum Ledger-Datenbank (AmazonQLDB)

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.

Grundlegendes zur Sitzungsverwaltung mit dem Fahrer in Amazon QLDB

Wichtig

Hinweis zum Ende des Supports: Bestandskunden können Amazon QLDB bis zum Ende des Supports am 31.07.2025 nutzen. Weitere Informationen finden Sie unter Migrieren eines Amazon QLDB Ledgers zu Amazon Aurora SQL Postgre.

Wenn Sie Erfahrung mit einem relationalen Datenbankmanagementsystem (RDBMS) haben, sind Sie vielleicht mit gleichzeitigen Verbindungen vertraut. QLDBhat nicht das gleiche Konzept einer herkömmlichen RDBMS Verbindung, da Transaktionen mit HTTP Anforderungs- und Antwortnachrichten ausgeführt werden.

QLDBIn ist das analoge Konzept eine aktive Sitzung. Eine Sitzung ähnelt konzeptionell einer Benutzeranmeldung — sie verwaltet Informationen über Ihre Datentransaktionsanfragen in einem Ledger. Eine aktive Sitzung ist eine Sitzung, in der aktiv eine Transaktion ausgeführt wird. Es kann sich auch um eine Sitzung handeln, die kürzlich eine Transaktion abgeschlossen hat und bei der der Service davon ausgeht, dass er sofort eine weitere Transaktion starten wird. QLDBunterstützt eine aktiv ausgeführte Transaktion pro Sitzung.

Das Limit für gleichzeitige aktive Sitzungen pro Ledger ist in Kontingente und Limits bei Amazon QLDB definiert. Wenn dieses Limit erreicht ist, führt jede Sitzung, die versucht, eine Transaktion zu starten, zu einem Fehler (LimitExceededException).

Bewährte Methoden für die Konfiguration eines Sitzungspools in Ihrer Anwendung mithilfe des QLDB Treibers finden Sie Das QldbDriver Objekt konfigurieren in den QLDBAmazon-Treiberempfehlungen.

Lebenszyklus einer Sitzung

Die folgende Abfolge von QLDBAPISitzungsvorgängen stellt den typischen Lebenszyklus einer QLDB Sitzung dar:

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. Wiederholen Sie die Schritte 2—4, um weitere Transaktionen zu starten (jeweils eine Transaktion).

  6. EndSession

Sitzungsablauf

QLDBläuft ab und verwirft eine Sitzung nach einer Gesamtlebensdauer von 13—17 Minuten, unabhängig davon, ob gerade eine Transaktion aktiv ausgeführt wird. Sitzungen können aus einer Reihe von Gründen verloren gehen oder beeinträchtigt werden, wie z. B. Hardwarefehler, Netzwerkfehler oder Anwendungsneustarts. QLDBerzwingt eine maximale Lebensdauer für Sitzungen, um sicherzustellen, dass die Client-Anwendung auch Sitzungsausfällen standhält.

Sitzungsbehandlung im Treiber QLDB

Sie können zwar an verwenden AWS SDK, um direkt mit der QLDBSitzung zu interagierenAPI, dies erhöht jedoch die Komplexität und erfordert, dass Sie einen Commit-Digest berechnen. QLDBverwendet diesen Commit-Digest, um die Integrität der Transaktion sicherzustellen. Anstatt direkt damit zu interagieren, empfehlen wirAPI, den QLDB Treiber zu verwenden.

Der Treiber bietet eine abstrakte Ebene auf hoher Ebene über den Transaktionsdaten. API Es optimiert den Prozess der Ausführung von PartiQL-Anweisungen für Ledger-Daten durch die Verwaltung von Aufrufen. SendCommandAPI Diese API Aufrufe erfordern mehrere Parameter, die der Treiber für Sie verarbeitet, einschließlich der Verwaltung von Sitzungen, Transaktionen und Wiederholungsrichtlinien für den Fall von Fehlern.

Überblick über das Sitzungspooling

In älteren Versionen des QLDB Treibers (zum Beispiel Java v1.1.0) haben wir zwei Implementierungen des Treiberobjekts bereitgestellt: eine standardmäßige, nicht QldbDriver gepoolte und eine. PooledQldbDriver Wie der Name schon sagt, PooledQldbDriver unterhält der einen Pool von Sitzungen, die transaktionsübergreifend wiederverwendet werden.

Aufgrund des Feedbacks der Benutzer ziehen es Entwickler vor, die Pooling-Funktion und ihre Vorteile standardmäßig zu nutzen, anstatt den Standardtreiber zu verwenden. Deshalb haben wir die Session-Pooling-Funktionalität entfernt PooledQldbDriver und sie auf verschoben. QldbDriver Diese Änderung ist in der neuesten Version jedes Treibers enthalten (z. B. Java v2.0.0).

Der Treiber bietet drei Abstraktionsebenen:

  • Treiber (gepoolte Treiberimplementierung) — Die Abstraktion auf oberster Ebene. Der Treiber verwaltet und verwaltet einen Sitzungspool. Wenn Sie den Treiber bitten, eine Transaktion auszuführen, wählt der Treiber eine Sitzung aus dem Pool aus und verwendet sie, um die Transaktion auszuführen. Wenn die Transaktion aufgrund eines Sitzungsfehlers (InvalidSessionException) fehlschlägt, verwendet der Treiber eine andere Sitzung, um die Transaktion zu wiederholen. Im Wesentlichen bietet der Treiber ein vollständig verwaltetes Sitzungserlebnis.

  • Sitzung — Eine Ebene unter der Treiberabstraktion. Eine Sitzung ist in einem Pool enthalten, und der Treiber verwaltet den Lebenszyklus der Sitzung. Wenn eine Transaktion fehlschlägt, wiederholt der Treiber sie bis zu einer bestimmten Anzahl von Versuchen in derselben Sitzung. Wenn die Sitzung jedoch auf einen Fehler (InvalidSessionException) stößt, wird dieser QLDB intern verworfen. Der Treiber ist dann dafür verantwortlich, eine weitere Sitzung aus dem Pool abzurufen, um die Transaktion erneut zu versuchen.

  • Transaktion — Die niedrigste Abstraktionsebene. Eine Transaktion ist in einer Sitzung enthalten, und die Sitzung verwaltet den Lebenszyklus der Transaktion. Die Sitzung ist dafür verantwortlich, die Transaktion im Falle eines Fehlers erneut zu versuchen. Die Sitzung stellt außerdem sicher, dass eine offene Transaktion, die nicht festgeschrieben oder storniert wurde, nicht durchsickern lässt.

In der neuesten Version jedes Treibers können Sie Operationen nur auf der Abstraktionsebene des Treibers ausführen. Sie haben keine direkte Kontrolle über einzelne Sitzungen und Transaktionen (d. h., es gibt keine API Operationen zum manuellen Starten einer neuen Sitzung oder Transaktion).

Sitzungspooling und Transaktionslogik

Die neueste Version der einzelnen Treiber bietet keine Implementierung des Treiberobjekts mehr, die nicht in einem Pool zusammengefasst sind. Standardmäßig verwaltet das QldbDriver Objekt den Sitzungspool. Wenn Sie einen Aufruf tätigen, um eine Transaktion auszuführen, führt der Treiber die folgenden Schritte aus:

  1. Der Treiber überprüft, ob er das Sitzungspool-Limit erreicht hat. Wenn ja, löst der Treiber sofort eine Ausnahme aus. NoSessionAvailable Andernfalls wird mit dem nächsten Schritt fortgefahren.

  2. Der Treiber überprüft, ob für den Pool eine verfügbare Sitzung verfügbar ist.

    • Wenn eine Sitzung im Pool verfügbar ist, verwendet der Treiber sie, um eine Transaktion auszuführen.

    • Wenn im Pool keine Sitzung verfügbar ist, erstellt der Treiber eine neue Sitzung und verwendet sie, um eine Transaktion auszuführen.

  3. Nachdem der Treiber in Schritt 2 eine Sitzung erhalten hat, ruft der Treiber den execute Vorgang auf der Sitzungsinstanz auf.

  4. Während der execute Ausführung der Sitzung versucht der Treiber, eine Transaktion durch einen Aufruf zu startenstartTransaction.

    • Wenn die Sitzung nicht gültig ist, schlägt der startTransaction Aufruf fehl und der Treiber kehrt zu Schritt 1 zurück.

    • Wenn der startTransaction Anruf erfolgreich ist, fährt der Treiber mit dem nächsten Schritt fort.

  5. Der Treiber führt Ihren Lambda-Ausdruck aus. Dieser Lambda-Ausdruck kann einen oder mehrere Aufrufe zur Ausführung von PartiQL-Anweisungen enthalten. Nachdem die Ausführung des Lambda-Ausdrucks ohne Fehler abgeschlossen wurde, fährt der Treiber mit dem Festschreiben der Transaktion fort.

  6. Das Festschreiben der Transaktion kann eines von zwei Ergebnissen haben:

    • Der Commit ist erfolgreich und der Treiber gibt die Kontrolle über Ihren Anwendungscode zurück.

    • Der Commit schlägt aufgrund eines optimistischen Concurrency-Control-Konflikts (OCC) fehl. In diesem Fall wiederholt der Treiber die Schritte 4—6 in derselben Sitzung. Die maximale Anzahl von Wiederholungsversuchen ist in Ihrem Anwendungscode konfigurierbar. Das Standardlimit ist4.

Anmerkung

Wenn in den Schritten 4—6 ein ausgelöst InvalidSessionException wird, markiert der Treiber die Sitzung als geschlossen und kehrt zu Schritt 1 zurück, um die Transaktion erneut zu versuchen.

Wenn in den Schritten 4—6 eine andere Ausnahme ausgelöst wird, prüft der Treiber, ob die Ausnahme erneut versucht werden kann. Falls ja, wiederholt er die Transaktion bis zur angegebenen Anzahl von Wiederholungsversuchen. Wenn nicht, wird die Ausnahme an Ihren Anwendungscode weitergegeben (und ausgelöst).

Sitzungen an den Pool zurückgeben

Wenn zu irgendeinem Zeitpunkt während einer aktiven Transaktion ein InvalidSessionException auftritt, gibt der Treiber die Sitzung nicht an den Pool zurück. QLDBverwirft stattdessen die Sitzung und der Treiber ruft eine weitere Sitzung aus dem Pool ab. In allen anderen Fällen gibt der Treiber die Sitzung an den Pool zurück.