Quando dovrei usare i lotti e quando dovrei usare le transazioni? Posso incorporare una transazione in un batch? Un lotto in una transazione?In CockroachDB, come interagiscono i batch e le transazioni?
risposta
A batch è una raccolta di operazioni che vengono inviate al server come una singola unità per l'efficienza. È equivalente all'invio delle stesse operazioni delle singole richieste da diversi thread. Le richieste in un batch possono essere eseguite fuori servizio ed è possibile che alcune operazioni in un batch abbiano esito positivo mentre altre falliscono.
In Go, i lotti vengono creati con l'oggetto batcher DB.B
e devono essere passati a DB.Run()
. Ad esempio:
err := db.Run(db.B.Put("a", "1").Put("b", "2"))
è equivalente a:
_, err1 := db.Put("a", "1")
_, err2 := db.Put("b", "2")
Un transazione definisce una sequenza coerente e atomico di operazioni. Le transazioni garantiscono la coerenza rispetto a tutte le altre operazioni nel sistema: i risultati di una transazione non possono essere visualizzati a meno che e fino a quando la transazione non viene eseguita. Dal momento che le transazioni potrebbero dover essere riprovate, le transazioni sono definite da oggetti funzione (in genere chiusure) che possono essere chiamate più volte.
In Go, le transazioni vengono create con il metodo DB.Tx. Il parametro *client.Tx
alla chiusura implementa un'interfaccia simile a DB
; all'interno della transazione è necessario eseguire tutte le operazioni su questo oggetto anziché sul DB originale. Se la tua funzione restituisce un errore, la transazione verrà interrotta; altrimenti si impegnerà. Ecco una versione transazionale dell'esempio precedente (ma vedi sotto per una versione più efficiente):
err := db.Tx(func(tx *client.Tx) error {
err := tx.Put("a", "1")
if err != nil {
return err
}
return tx.Put("b", "2")
})
L'esempio precedente attende le attese "a" scrivere per completare prima di iniziare la "b" di scrittura, e poi per la scrittura "b" da completare prima di eseguire la transazione. È possibile renderlo più efficiente utilizzando i batch all'interno della transazione. Tx.B
è un oggetto batcher, proprio come DB.B
. In una transazione, è possibile eseguire batch con Tx.Run
o Tx.Commit
. Tx.Commit
effettuerà il commit della transazione se e solo se tutte le altre operazioni nel batch hanno esito positivo ed è più efficiente che consentire il commit automatico della transazione al momento della restituzione della chiusura. Si tratta di una buona pratica di fare sempre l'ultima operazione in una transazione un batch eseguito da Tx.Commit
:
err := db.Tx(func(tx *client.Tx) error {
return tx.Commit(tx.B.Put("a", "1").Put("b", "2"))
})
- 1. Come interagiscono UserTransaction e EntityManager?
- 2. Come interagiscono DeleteFile e FindFirstFile?
- 3. Come interagiscono jenkins, Github e Puppet
- 4. OpenCV e Numpy interagiscono male
- 5. Come interagiscono i controller Modal e Child View?
- 6. Come set-up transazioni sia per applicazioni web e processi batch utilizzando primavera e Hibernate
- 7. Transazioni - Come evitare i deadlock?
- 8. Come eseguire le transazioni in Grails
- 9. Come testare le transazioni MySQL?
- 10. Come faccio le transazioni nidificate in NHibernate?
- 11. In che modo Spring Batch gestisce le transazioni (con possibilmente più origini dati)?
- 12. Come interagiscono più lingue in un progetto?
- 13. Come mantenere i dati dei frammenti dopo le transazioni backstack?
- 14. Quando utilizzare le transazioni in SQL Server
- 15. mysql commit e transazioni
- 16. Supporto per le transazioni in MongoDB
- 17. Supporto per le transazioni in adbapi twistato
- 18. Come sovrascrivere i file esistenti in batch?
- 19. Come definire le sessioni e le transazioni di NHibernate in un'applicazione WPF
- 20. TransactionScope e Transazioni
- 21. Descrizione concisa di come i file .h e .m interagiscono nell'obiettivo c?
- 22. Vedere le transazioni Bitcoin estera
- 23. Le transazioni nidificate sono consentite in MySQL?
- 24. È una progettazione scadente per i DAO gestire le transazioni?
- 25. Come disabilitare i registri delle transazioni in SQL Server 2008
- 26. Leggere e scrivere transazioni in Amazon Kinesis
- 27. Transazioni primaverili in servizio e livelli DAO
- 28. App Engine, transazioni e idempotency
- 29. transazioni ACID e database?
- 30. Transazioni Mysql nelle transazioni
si dovrebbe contrassegnare la risposta come la risposta, sarà molto utile –