Domanda

Sto scrivendo una cosa piuttosto semplice e-commerce app In asp.net, è necessario utilizzare le transazioni nelle procedure memorizzate?

Il rapporto di lettura/scrittura è di circa 9:1

È stato utile?

Soluzione

Molte persone chiedono: ho bisogno di transazioni?Perché ne ho bisogno?Quando usarli?

La risposta è semplice:usali sempre, a meno che tu non abbia una buona ragione per non farlo (ad esempio, non utilizzare transazioni atomiche per "attività di lunga durata" tra aziende).L'impostazione predefinita dovrebbe essere sempre sì.Hai dei dubbi?- utilizzare le transazioni.

Perché le transazioni sono vantaggiose?Ti aiutano a gestire arresti anomali, guasti, coerenza dei dati, gestione degli errori, ti aiutano a scrivere codice più semplice, ecc.E l’elenco dei vantaggi continuerà ad allungarsi nel tempo.

Ecco alcune informazioni in più da http://blogs.msdn.com/florinlazar/

Altri suggerimenti

Ricorda che in SQL Server tutte le operazioni CRUD con istruzione singola si trovano in una transazione implicita per impostazione predefinita.Devi solo attivare le transazioni esplicite (BEGIN TRAN) se devi fare in modo che più istruzioni agiscano come un'unità atomica.

La risposta è, dipende.Non è sempre necessaria la sicurezza delle transazioni.A volte è eccessivo.A volte non lo è.

Vedo che, ad esempio, quando implementi un processo di pagamento, vuoi finalizzarlo solo dopo aver raccolto tutti i dati, ecc.Pensa a un pagamento in anticipo, puoi ripristinarlo: questo è un esempio quando hai bisogno di una transazione.O forse quando è saggio usarli.

Hai bisogno di una transazione quando crei un nuovo account utente?Forse, se si tratta di 10 tavoli (per qualsiasi motivo), se è solo un singolo tavolo probabilmente no.

Dipende anche da cosa hai venduto al tuo cliente e chi è, se lo ha richiesto, ecc.Ma se prendere una decisione dipende da te, allora direi di scegliere saggiamente.

La mia conclusione è: evitare l'ottimizzazione prematura.Crea la tua applicazione, tieni presente che potresti voler tornare indietro e rifattorizzare/ottimizzare in seguito quando ne avrai bisogno.Guarda un paio di progetti opensource e guarda come hanno implementato le diverse parti della loro app, impara da questo.Vedrai che la maggior parte di loro non utilizza affatto le transazioni, eppure ci sono enormi negozi online che le utilizzano.

Certo, dipende.

Dipende dal lavoro eseguito dalla particolare procedura memorizzata e, forse, non tanto dal "rapporto lettura/scrittura" suggerito.In generale, dovresti considerare di racchiudere un'unità di lavoro all'interno di una transazione se si tratta di una query che potrebbe essere influenzata da altre query eseguite simultaneamente.Se questo sembra non deterministico, lo è.Spesso è difficile prevedere in quali circostanze una particolare unità di lavoro si qualifica come candidata a questo scopo.

Un buon punto di partenza è rivedere i dati precisi CRUDO eseguito all'interno dell'unità di lavoro, in questo caso all'interno della procedura memorizzata, e decidere se a) potrebbe essere influenzato da qualche altra operazione simultanea e b) se quell'altro lavoro è importante per il risultato finale di questo lavoro eseguito (o , anche, viceversa).Se la risposta è "Sì" ad entrambe, valuta la possibilità di racchiudere l'unità di lavoro all'interno di una transazione.

Ciò che questo suggerisce è che non puoi sempre semplicemente decidere di farlo utilizzare o non utilizzare la transazionesì, dovresti piuttosto applicarli quando ha senso.Utilizza le proprietà definite da ACIDO (Atomicità, Coerenza, Isolamento e Durabilità) per aiutare a decidere quando questo potrebbe essere il caso.

Un'altra cosa da considerare è che in alcune circostanze, in particolare se il sistema deve eseguire molte operazioni in rapida successione, ad esempio un'applicazione di elaborazione di transazioni ad alto volume, potrebbe essere necessario valutare il costo relativo delle prestazioni della transazione.A seconda delle dimensioni dell'unità di lavoro, un commit (o rollback) di una transazione può essere costoso in termini di risorse, magari incidendo negativamente sulle prestazioni del sistema inutilmente o, almeno, con benefici limitati.

Purtroppo non è facile rispondere con precisione a questa domanda:"Dipende."

Usali se:

  1. Ci sono alcuni errori che potresti voler testare e rilevare che non verranno rilevati se non quando esci e fai il lavoro (cercare le cose, testare i valori, ecc.), solitamente dall'interno di una transazione in modo da poter eseguire il rollover sostenere l'intera operazione.
  2. Esistono operazioni a più passaggi di qualsiasi tipo che, logicamente, dovrebbero essere ripristinate come gruppo se falliscono.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top