Pregunta

Estoy escribiendo un tema bastante sencillo. e-commerce app en asp.net, ¿necesito utilizar transacciones en mis procedimientos almacenados?

La relación lectura/escritura es de aproximadamente 9:1

¿Fue útil?

Solución

Mucha gente pregunta: ¿necesito transacciones?¿Por qué los necesito?¿Cuándo usarlos?

La respuesta es simple:Úsalos todo el tiempo, a menos que tengas una muy buena razón para no hacerlo (por ejemplo, no uses transacciones atómicas para "actividades de larga duración" entre empresas).El valor predeterminado siempre debe ser sí.¿Tienes dudas?- utilizar transacciones.

¿Por qué son beneficiosas las transacciones?Le ayudan a lidiar con fallas, consistencia de datos, manejo de errores, le ayudan a escribir código más simple, etc.Y la lista de beneficios seguirá creciendo con el tiempo.

Aquí hay más información de http://blogs.msdn.com/florinlazar/

Otros consejos

Recuerde que en SQL Server todas las operaciones CRUD de declaración única están en una transacción implícita de forma predeterminada.Solo necesita activar transacciones explícitas (BEGIN TRAN) si necesita que varias declaraciones actúen como una unidad atómica.

La respuesta es, depende.No siempre se necesita seguridad en las transacciones.A veces es excesivo.A veces no lo es.

Puedo ver que, por ejemplo, cuando implementas un proceso de pago solo deseas finalizarlo una vez que hayas recopilado todos los datos, etc.Piense en un pago que puede revertir; ese es un ejemplo cuando necesita una transacción.O tal vez cuándo sea prudente utilizarlos.

¿Necesita una transacción cuando crea una nueva cuenta de usuario?Tal vez, si se trata de 10 tablas (por cualquier motivo), si es solo una tabla, probablemente no.

También depende de qué le vendiste a tu cliente y quiénes son, si lo solicitaron, etc.Pero si tomar una decisión depende de usted, entonces le diría que elija sabiamente.

Mi conclusión es evitar la optimización prematura.Cree su aplicación, tenga en cuenta que es posible que desee volver atrás y refactorizar/optimizar más tarde cuando lo necesite.Mire un par de proyectos de código abierto y vea cómo implementaron diferentes partes de su aplicación, aprenda de eso.Verás que la mayoría de ellos no utilizan transacciones en absoluto, sin embargo, hay grandes tiendas online que las utilizan.

Por supuesto, depende.

Depende del trabajo que realiza el procedimiento almacenado en particular y, quizás, no tanto de la "proporción de lectura/escritura" que usted sugiere.En general, debería considerar incluir una unidad de trabajo dentro de una transacción si se trata de una consulta que podría verse afectada por alguna otra consulta que se ejecute simultáneamente.Si esto suena no determinista, lo es.A menudo es difícil predecir bajo qué circunstancias una unidad de trabajo particular califica como candidata para esto.

Un buen punto de partida es revisar los datos precisos CRUD que se está realizando dentro de la unidad de trabajo, en este caso dentro de su procedimiento almacenado, y decidir si a) podría verse afectado por alguna otra operación simultánea y b) si ese otro trabajo es importante para el resultado final de este trabajo que se realiza (o , incluso, viceversa).Si la respuesta es "Sí" a ambas preguntas, considere incluir la unidad de trabajo dentro de una transacción.

Lo que esto sugiere es que no siempre puedes simplemente decidir si usar o no usar transaccións, más bien deberías aplicarlos cuando tenga sentido.Utilice las propiedades definidas por ÁCIDO (Atomicidad, Consistencia, Aislamiento y Durabilidad) para ayudar a decidir cuándo podría ser este el caso.

Otra cosa a considerar es que en algunas circunstancias, particularmente si el sistema debe realizar muchas operaciones en rápida sucesión, por ejemplo, una aplicación de procesamiento de transacciones de gran volumen, es posible que deba sopesar el costo de rendimiento relativo de la transacción.Dependiendo del tamaño de la unidad de trabajo, una confirmación (o reversión) de una transacción puede consumir muchos recursos y tal vez afectar negativamente el rendimiento de su sistema de manera innecesaria o, al menos, con un beneficio limitado.

Desafortunadamente, esta no es una pregunta fácil de responder con precisión:"Eso depende."

Úsalos si:

  1. Hay algunos errores que es posible que desee probar y detectar, que no se detectarán excepto si usted sale y hace el trabajo (buscando cosas, probando valores, etc.), generalmente desde una transacción para que pueda ejecutar retroceder toda la operación.
  2. Hay operaciones de varios pasos de cualquier tipo que, lógicamente, deberían revertirse como grupo si fallan.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top