Wann sollte ich Batches verwenden und wann sollte ich Transaktionen verwenden? Kann ich eine Transaktion in einen Stapel einbetten? Ein Batch in einer Transaktion?Wie interagieren Batches und Transaktionen in CockroachDB?
Antwort
Ein Stapel ist eine Sammlung von Vorgängen, die aus Effizienzgründen an den Server als Einheit gesendet werden. Dies entspricht dem Senden der gleichen Operationen wie einzelne Anforderungen von verschiedenen Threads. Anforderungen in einem Stapel können außerhalb der Reihenfolge ausgeführt werden, und einige Vorgänge in einem Stapel können erfolgreich ausgeführt werden, während andere fehlschlagen.
In Go werden Chargen mit dem Batcher-Objekt DB.B
erstellt und müssen an DB.Run()
übergeben werden. Zum Beispiel:
err := db.Run(db.B.Put("a", "1").Put("b", "2"))
entsprechen:
_, err1 := db.Put("a", "1")
_, err2 := db.Put("b", "2")
A Transaktion eine konsistente und atomare Folge von Operationen definiert. Transaktionen gewährleisten die Konsistenz in Bezug auf alle anderen Vorgänge im System: Die Ergebnisse einer Transaktion werden erst angezeigt, wenn die Transaktion festgeschrieben wurde. Da Transaktionen möglicherweise wiederholt werden müssen, werden Transaktionen durch Funktionsobjekte (typischerweise Schließungen) definiert, die mehrmals aufgerufen werden können.
In Go werden Transaktionen mit der Methode DB.Tx erstellt. Der Parameter *client.Tx
für den Abschluss implementiert eine ähnliche Schnittstelle wie ; Innerhalb der Transaktion müssen Sie alle Ihre Operationen für dieses Objekt anstelle der ursprünglichen DB ausführen. Wenn Ihre Funktion einen Fehler zurückgibt, wird die Transaktion abgebrochen. Andernfalls wird es festgeschrieben. Hier ist eine transaktionale Version des vorherigen Beispiels (aber unten für eine effizientere Version sehen):
err := db.Tx(func(tx *client.Tx) error {
err := tx.Put("a", "1")
if err != nil {
return err
}
return tx.Put("b", "2")
})
Das vorherige Beispiel wartet auf dem „a“ den „b“ zu vervollständigen schreiben vor Beginn des Schreib, und dann wartet für das "b" schreiben, um vor der Übergabe der Transaktion abzuschließen. Es ist möglich, dies effizienter zu machen, indem Sie Stapel innerhalb der Transaktion verwenden. Tx.B
ist ein Batcher-Objekt, genau wie DB.B
. In einer Transaktion können Sie Stapel mit Tx.Run
oder Tx.Commit
ausführen. Tx.Commit
wird die Transaktion nur dann festschreiben, wenn alle anderen Operationen im Stapel erfolgreich sind, und ist effizienter als die Transaktion automatisch festschreiben zu lassen, wenn der Abschluss zurückgegeben wird. Es ist eine gute Praxis, immer die letzte Operation in einer Transaktion eine Charge von Tx.Commit
ausgeführt zu machen:
err := db.Tx(func(tx *client.Tx) error {
return tx.Commit(tx.B.Put("a", "1").Put("b", "2"))
})
- 1. Wie interagieren DeleteFile und FindFirstFile?
- 2. Batches vs Tris Leistung
- 3. Kopieren Paste 1 Spalte in Batches
- 4. Wie interagieren DispatcherServlet, Resolver und Controller?
- 5. Wie interagieren durch vim?
- 6. Wie Klassen miteinander interagieren
- 7. Spring's JdbcTemplate und Transaktionen
- 8. Wie parsen Sie große SQL-Skripts in Batches?
- 9. Interagieren Breadcrumbs und Views in Drupal?
- 10. Anzeigen und Interagieren mit HTML in Java
- 11. NHibernate, Transaktionen und TransactionScope
- 12. TransactionScope und Transaktionen
- 13. PHP- und PostgreSQL-Transaktionen?
- 14. Hibernate und Transaktionen und Tabellensperren
- 15. Objektorientierte Programmierung und Transaktionen
- 16. SOA und verteilte Transaktionen
- 17. Match/Against und Transaktionen
- 18. Spring-Transaktionen und hibernate.current_session_context_class
- 19. Systembefehl in Ruby ausführen und damit interagieren
- 20. Wie interagieren/oauth/authorize und/oauth/token in Spring OAuth?
- 21. Hibernate Sessions und Transaktionen mit Themen
- 22. NHibernate command_timeout funktioniert nicht mit Batches
- 23. Wie interagieren Signale mit Sequenzpunkten?
- 24. PDO, mysql, Transaktionen und Tabellenverriegelung
- 25. .NET Entity Framework und Transaktionen
- 26. App Engine, Transaktionen und Idempotenz
- 27. Object Context, Repositories und Transaktionen
- 28. Sharding und Transaktionen mit MySQL
- 29. Wie DynamoDB Transaktionen verfolgen
- 30. Interagieren mit Elasticsearch in django
Sie Ihre Antwort als Antwort markieren sollen, wird es sehr hilfreich sein –