6

Qualcuno ha esperienza che può condividere usando MySQL savepoints (direttamente o tramite un ORM), specialmente in un servizio web non banale? Dove li hai effettivamente usati? Sono abbastanza affidabili (supponendo che tu sia disposto a eseguire una versione abbastanza recente di MySQL) o troppo dispendioso o costoso?Utilizzi reali dei punti di salvataggio MySQL nei servizi Web?

Infine, qualcuno ha esperienza con qualcosa come il seguente caso d'uso e hai usato punti di salvataggio per questo? Dire che il punto principale di alcune unità di lavoro specifiche è aggiungere una riga a una tabella Orders (o qualsiasi altra cosa, non deve essere correlata all'ordine, ovviamente) e aggiornare una tabella OrdersAuditInfo, nella stessa transazione. È essenziale aggiornare Orders se possibile, ma la tabella OrdersAuditInfo non è essenziale (ad esempio, è sufficiente registrare un errore in un file, ma continuare con la transazione generale). Ad un livello basso che potrebbe assomigliare a questo (attenzione, segue pseudo-SQL):

BEGIN; 

INSERT INTO Orders(...) VALUES (...); 
/* Do stuff outside of SQL here; if there are problems, do a 
ROLLBACK and report an error (i.e., Order is invalid in this 
case anyway). */ 

SAVEPOINT InsertAudit; 
INSERT INTO OrdersAudit(...) VALUES(...); 
/* If the INSERT fails, log an error to a log file somewhere and do: */ 
ROLLBACK TO SAVEPOINT InsertAudit; 

/* Always want to commit the INSERT INTO Orders: */ 
COMMIT; 

Ma anche qui forse ci sarebbe una migliore (o almeno più comune) idioma? Si potrebbe fare l'inserto OrdersAuditInfo in una transazione completamente diversa, ma sarebbe bello garantire che il tavolo OrdersAuditInfo fosse non scritto a meno che l'ultimo COMMIT funzionasse effettivamente.

risposta

1

Generalmente io tendo ad evitare SAVEPOINT, in quanto può rendere il codice piuttosto difficile da capire e verificare.

Nel caso in cui è stato pubblicato, il wrapping in una singola transazione dipenderà dal fatto che avere record esattamente corrispondenti a Orders, è parte delle regole aziendali.

MODIFICA: rileggi la tua domanda e non hai requisiti per la corrispondenza garantita tra OrdersAudit e Orders. Quindi non utilizzerei alcuna transazione per l'inserimento dei record OrdersAudit.

+0

Il motivo per cui desideravo che OrderAudit facesse parte della transazione globale era nel caso in cui l'inserimento in ordini non fosse riuscito in fase di COMMIT per qualche motivo. –

Problemi correlati