database - uso - Desventaja de los procedimientos almacenados
ventajas procedimientos (19)
Me gustaría obtener una lista de las ventajas y desventajas del uso de procedimientos almacenados. La principal ventaja de los SP parece ser un precompilado y una abstracción de datos de la aplicación. Dame tus pensamientos ...
Al usar SP, también evita tener que dar acceso directo a las tablas a los usuarios. Todos los accesos se pueden controlar a través de los SP.
Con las bibliotecas de framework .Net 3.5 actuales, usaría Linq para realizar la mayoría de las operaciones de bases de datos. Puede haber lugares donde SP tenga más sentido. Pero Linq también tiene disposiciones para ejecutar un SP.
Sobre el tema de desventajas de SP, consulte el siguiente enlace: un análisis interesante. Revise los comentarios de la publicación del blog también.
http://www.spoiledtechie.com/post/Whats-up-with-Stored-Procedures-these-days.aspx
Otra desventaja es el control de versiones, porque parte de la lógica empresarial ahora está en el lado de la base de datos. ¿Puedes retroceder fácilmente a v1 (hace un año) desde v2 (ahora)?
Una solución factible es versionar los nombres de procedimientos almacenados. Pero ahora la base de datos es un desastre con los procedimientos almacenados viejos y nuevos.
Solo por algunas razones utilizo los procedimientos almacenados exclusivamente al crear aplicaciones:
- Los procedimientos almacenados pueden ser la interfaz entre su aplicación y la base de datos subyacente. De esta forma, el servidor en el que reside la base de datos, que suele ser más potente que una máquina de escritorio, puede utilizarse para realizar procedimientos más complejos.
- Si necesita cambiar la estructura de la base de datos, puede hacerlo sin interrumpir su aplicación si se utilizan procedimientos almacenados como interfaz.
- A medida que escribe, los procedimientos almacenados contienen SQL precompilado y probado previamente.
- Es más fácil realizar operaciones complejas con procedimientos almacenados que con SQL generado por el cliente o la GUI.
Ventaja: el DBA puede agregar un comportamiento que a la aplicación no le importa. Por ejemplo, almacenar una fecha de modificación en cada fila.
Ventaja: el equipo de operaciones tiene un gancho para monitorear o solucionar problemas en la producción.
Ventaja: los procedimientos almacenados se pueden usar para mantener la integridad de los datos y hacer cumplir la política de la base de datos sin depender de un programa externo para hacerlo.
Desventaja: puede hacer que la depuración sea más compleja. También puede ser sensible a la caída durante las operaciones de copia, si no se hace correctamente.
Ventajas -
- Organizado en un solo lugar (no rociado todo el código)
- Mucho más rápido que las consultas dinámicas
Ventaja: su código relacionado con la base de datos es más probable que sea escrito por personal que esté interesado y capacitado en el trabajo de la base de datos.
Corrección: si están precompilados depende de la base de datos. En SQL Server, por ejemplo, no lo son. Los procedimientos almacenados y el SQL parametrizado se compilan antes de ejecutarse. Un procedimiento almacenado a veces puede reutilizar un plan de ejecución si existe uno correspondiente ... pero también puede hacerlo un SQL parametrizado.
Editar: Esto es lo que dice MSDN al respecto :
SQL Server 2000 y SQL Server versión 7.0 incorporan una serie de cambios en el procesamiento de sentencias que extienden muchas de las ventajas de rendimiento de los procedimientos almacenados a todas las sentencias de SQL. SQL Server 2000 y SQL Server 7.0 no guardan un plan parcialmente compilado para los procedimientos almacenados cuando se crean. Un procedimiento almacenado se compila en tiempo de ejecución, como cualquier otra instrucción de Transact-SQL. SQL Server 2000 y SQL Server 7.0 retienen los planes de ejecución para todas las sentencias SQL en la caché de procedimientos, no solo para los planes de ejecución de procedimientos almacenados.
Desventajas
- El control de la fuente puede ser un dolor.
- La depuración es difícil.
- Si tiene mucha funcionalidad en los procesos, dificultará el intercambio entre diferentes sistemas de bases de datos. También crea más trabajo si desea admitir diferentes sistemas de bases de datos.
- Desarrollar procedimientos almacenados puede ser una tarea bastante especializada, especialmente a medida que se vuelven más complejos.
Ventajas: los SP se utilizan para ejecutar un conjunto de sentencias SQL. Desventajas: la depuración es compleja
Ventajas : Proporciona una "interfaz pública" a una base de datos (otra capa de abstracción).
También agrupa todas las consultas en la misma ubicación, lo que facilita a los DBA ver cómo se consulta la base de datos y optimizarla en consecuencia.
Desventajas : Puede que no sea el mejor lugar para poner una lógica compleja. Sin embargo, siguiendo la idea de que la lógica compleja pertenece al código de la aplicación y no a los procedimientos almacenados, el procedimiento almacenado se convierte simplemente en operaciones CRUD (cada tabla tiene un procedimiento "Crear", "Leer", "Actualizar" y "Eliminar"). En ese caso, los procedimientos almacenados no agregan ningún valor a la aplicación, solo complementan el mantenimiento y se convierten en desperdicio.
Las consultas están agrupadas juntas, por lo que es más difícil ver el contexto de la aplicación donde se están utilizando. Analizar el impacto de un cambio es más largo, y hacer el cambio también es más largo.
Por lo tanto, utilice procedimientos almacenados para encapsular consultas complejas (combinaciones complejas, cláusulas complex where, ...). Pero no use el procedimiento almacenado para aplicaciones complejas / dominio / lógica comercial, y tampoco use procedimientos almacenados para CRUD. Por lo tanto, los procedimientos almacenados se deben usar en una minoría de casos en lugar de ser la herramienta estándar para todas las consultas en una aplicación.
Código de grupo (incluidas las consultas) para lograr "cohesión funcional" en lugar de agrupar por herramienta / tecnología. Para permitir que un DBA optimice una base de datos en función de cómo se está consultando, use un generador de perfiles.
Otra ventaja puede ser en entornos corporativos grandes donde podría tener múltiples aplicaciones de cliente y entornos (como web, escritorio, herramientas de informes distribuidos en diferentes sistemas operativos) que usan la base de datos. Para algunos cambios de reglas de negocios, el cambio se puede hacer en la base de datos y esto sería efectivo en todos los entornos.
La ventaja que veo en el uso de procedimientos almacenados sobre la escritura de la misma lógica dentro del código de la aplicación es que puede reducir el número de llamadas que realiza la aplicación a la base de datos.
Un procedimiento almacenado puede tomar sus argumentos y tomar diferentes decisiones y acciones basadas en esos argumentos en lugar de devolver un resultado a la aplicación, y luego la aplicación toma una decisión y decide que necesita realizar otra acción y hacer otra llamada a la base de datos.
El cuello de la botella en el rendimiento casi siempre es una comunicación entre procesos. Intento hacer la cantidad mínima de llamadas a la base de datos.
la respuesta simple sería como sigue: adv: es la estructura más poderosa para encapsular códigos T-SQL. no está limitado a SELECT, y es compatible con todos los códigos DML. proporciona recibir entradas y devolver salidas directamente.
dis: no es posible llamarlo en SELECT, por lo que no puede ejecutarlo para varios registros.
Desventajas
Refactorizar es más difícil. Renombrar o cambiar dónde está el procedimiento almacenado puede producir un efecto negativo.
El procedimiento almacenado de pruebas unitarias requiere la asistencia del código fuera del DB
Ventaja
- No necesita implementar para realizar un cambio.
- Más rápido en algún momento
- Más fácil expandir un sistema
Aumenta la carga en el servidor. Si otras aplicaciones o más de una aplicación utilizan el mismo servidor de base de datos, se vuelven lentas.