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.
Wiederholbare Schreibvorgänge in Amazon DocumentDB
Ab der Engine-Version 8.0.2 unterstützt Amazon DocumentDB wiederholbare Schreibversuche. Wenn ein Schreibvorgang aufgrund eines vorübergehenden Netzwerkfehlers oder einer Primärwahl fehlschlägt, kann der Treiber den Vorgang automatisch genau einmal wiederholen. Amazon DocumentDB dedupliziert den erneuten Schreibversuch, sodass der Vorgang höchstens einmal ausgeführt wird, wodurch die Idempotenz erhalten bleibt.
Für erneut versuchbare Schreibvorgänge ist ein MongoDB-compatible Treiber erforderlich, der das Protokoll für wiederholbare Schreibvorgänge unterstützt. Die meisten aktuellen MongoDB-compatible Treiber ermöglichen standardmäßig wiederholbare Schreibversuche (retryWrites=truein der Verbindungszeichenfolge). Wenn Sie ein Upgrade von einer früheren Version auf Engine 8.0.2 durchführen, können Sie dies retryWrites=false aus Ihrer Verbindungszeichenfolge entfernen, um diese Funktion zu aktivieren.
Voraussetzungen
Um wiederholbare Schreibvorgänge verwenden zu können, müssen Sie die folgenden Anforderungen erfüllen:
-
Amazon DocumentDB-Engine Version 8.0.2 oder höher.
-
Ein MongoDB-compatible Treiber, der wiederholbare Schreibversuche unterstützt. Die Mindestversion finden Sie in der Dokumentation zu Ihrem Treiber.
-
Die Verbindungszeichenfolge muss Folgendes enthalten
retryWrites=true, oder der Treiber muss standardmäßig wiederholbare Schreibvorgänge verwenden (bei den meisten aktuellen Treibern ist das der Fall).
Unterstützte Vorgänge
Wiederholbare Schreibvorgänge gelten für Schreibvorgänge, bei denen sich jeder einzelne Schreibvorgang auf höchstens ein Dokument auswirkt. Batch-Operationen kommen in Frage, da jeder Schreibvorgang innerhalb des Batches separat dedupliziert wird.
Die folgenden Schreibvorgänge können wiederholt werden:
insertOneinsertManyupdateOnedeleteOnefindOneAndUpdatefindOneAndDeletefindOneAndReplacebulkWrite(wenn sie ausinsertOne,updateOnedeleteOne, oderreplaceOneOperationen bestehen)
Bei insertMany und bulkWrite wird jedes Dokument im Stapel einzeln dedupliziert. Wenn ein erneuter Versuch erforderlich ist, werden nur die Dokumente eingefügt, die noch nicht angewendet wurden.
Anmerkung
commitTransactionund können ebenfalls erneut versucht abortTransaction werden, und zwar als Befehle zur Transaktionskontrolle und nicht als Schreibvorgänge. Die einzelnen Schreibvorgänge innerhalb einer Transaktion können nicht wiederholt werden. Weitere Informationen finden Sie unter Einschränkungen.
Einschränkungen
Die folgenden Einschränkungen gelten für Schreibversuche in Amazon DocumentDB, die erneut versucht werden können:
-
updateManyund können nicht erneut versuchtdeleteManywerden. -
Schreibvorgänge innerhalb von Transaktionen mit mehreren Anweisungen können nicht erneut versucht werden. Operationen zum Festschreiben und Abbrechen von Transaktionen können separat wiederholt werden.
-
Dokumente müssen ein
_idFeld für wiederholbare Einfügungen enthalten. -
Wiederholbare Schreibvorgänge sind nur in der Engine-Version 8.0.2 und höher verfügbar. Geben Sie
retryWrites=falsein früheren Engine-Versionen Ihre Verbindungszeichenfolge ein, um Fehler zu vermeiden. -
Schreibvorgänge können auf Clustern, die Query Planner Version 1.0 verwenden, nicht erneut versucht werden.
-
Bei
findOneAndReplaceVorgängen und VorgängenfindOneAndUpdatefindOneAndDelete, die große Dokumente zurückgeben, kann es bei wiederholten Schreibvorgängen zu einer erhöhten Schreiblatenz kommen, da das gesamte Ergebnisdokument zur Deduplizierung zwischengespeichert wird. Wenn die Schreibleistung entscheidend ist und die zurückgegebenen Dokumente groß sind, sollten Sie die Einstellungen für diese Workloads in Betracht ziehen.retryWrites=false
Wiederholbare Schreibversuche aktivieren
Um wiederholbare Schreibvorgänge zu aktivieren, fügen Sie Folgendes retryWrites=true in Ihre Verbindungszeichenfolge ein:
mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true
Wenn Ihr Treiber standardmäßig auf eingestellt istretryWrites=true, können Sie alle expliziten Angaben retryWrites=false aus Ihrer Verbindungszeichenfolge entfernen.
Die vollständige Anleitung zur Verbindungszeichenfolge finden Sie unter. Programmgesteuertes Herstellen einer Verbindung zu Amazon DocumentDB
So funktionieren wiederholbare Schreibvorgänge
Wenn Ihre Anwendung einen Schreibvorgang mit sendetretryWrites=true, fügt der Treiber dem Schreibbefehl eine logische Sitzungs-ID (lsid) und eine Transaktionsnummer (txnNumber) hinzu. Amazon DocumentDB verwendet diese Identifikatoren, um Schreibvorgänge zu deduplizieren:
-
Beim ersten Versuch führt Amazon DocumentDB den Schreibvorgang aus und speichert das Ergebnis im Cache.
-
Wenn der Treiber denselben Schreibvorgang wiederholt (dasselbe
lsidundtxnNumber), gibt Amazon DocumentDB das zwischengespeicherte Ergebnis zurück, ohne den Schreibvorgang erneut auszuführen. -
Amazon DocumentDB berücksichtigt Wiederholungsversuche für 60 Minuten nach dem ursprünglichen Schreibvorgang. Die Treiber versuchen es sofort erneut, sodass dieses Fenster viel länger ist, als ein Treiber benötigt.
Wenn ein Wiederholungsversuch mehr als 60 Minuten nach dem ursprünglichen Schreibvorgang eintrifft, hat Amazon DocumentDB dafür kein zwischengespeichertes Ergebnis mehr und führt den Schreibvorgang als neuen Vorgang aus.
Fehlerbehandlung
Die folgenden Fehler sind spezifisch für wiederholbare Schreibvorgänge in Amazon DocumentDB:
| Fehlercode | Name | Description |
|---|---|---|
| 225 | TransactionTooOld | Eine neuere Transaktionsnummer für dieselbe Sitzung und Aussage wurde bereits festgeschrieben, daher ist dieser Wiederholungsversuch zu alt, um ihn anzuwenden. |
| 301 | Wiederholbare Schreibvorgänge werden nicht unterstützt | Der Schreibvorgang enthielt Felder, in denen erneut versucht werden kann, aber die Engine-Version unterstützt keine wiederholbaren Schreibvorgänge, oder der Vorgang kann nicht wiederholt werden. retryWrites=falseWird gesetzt, wenn eine Verbindung zu Engine-Versionen vor 8.0.2 hergestellt wird. |
Migration von retryWrites=False
Wenn Sie auf Engine-Version 8.0.2 aktualisieren und derzeit in Ihren Verbindungszeichenfolgen verwenden: retryWrites=false
-
Aktualisieren Sie Ihren Cluster auf Engine-Version 8.0.2 oder höher.
-
Entfernen Sie es
retryWrites=falseaus den Verbindungszeichenfolgen Ihrer Anwendung, oder ändern Sie es inretryWrites=true. -
Es sind keine Änderungen des Anwendungscodes erforderlich. Der Treiber verarbeitet Wiederholungen automatisch.