Pregunta

Cual es mejor?O uso y / O mapper con SP?Si usted tiene un sistema con el SP ya, es un O de asignador de la pena?

¿Fue útil?

Solución

Me gusta ORM es porque usted no tiene que reinventar la rueda.Lo que se dice, depende por completo de las necesidades de su aplicación, desarrollo de estilo y de todo el equipo.

Esta pregunta ya ha sido cubierto ¿Por qué es SQL con parámetros generados por NHibernate tan rápido como un procedimiento almacenado?

Otros consejos

No hay nada bueno que decir acerca de los procedimientos almacenados.Había una necesidad de hace 10 años, pero cada beneficio del uso de sprocs no es válida.Los dos argumentos más comunes están relacionadas con la seguridad y el rendimiento.El "envío de material a través del cable" mierda no se mantiene bien, yo sin duda puede crear una consulta de forma dinámica para hacer todo en el servidor también.Una cosa que el procedimiento almacenado proponentes no dicen es que hace que las actualizaciones imposible si usted está usando la columna de resolución de conflictos, en una publicación de mezcla.Sólo los Administradores de bases de datos que piensan que son la base de datos overlord insistir en sprocs porque hace su trabajo un aspecto más impresionante de lo que realmente es.

En mi trabajo, que en su mayoría se hacen aplicaciones de línea de negocios - contrato de trabajo.

Para este tipo de negocios, soy un gran fan de ORM.Hace unos cuatro años (cuando el ORM herramientas eran menos maduros) se estudió en CSLA y laminado en nuestra propia simplificada de la herramienta ORM que utilizamos en la mayoría de nuestras aplicaciones,incluyendo algunos de clase empresarial, los sistemas que tienen más de 100 tablas.

Estimamos que este enfoque (que incluye, por supuesto, un montón de generación de código) crea un ahorro de tiempo de hasta el 30% en nuestros proyectos.En serio, es ridículo.

Hay un pequeño rendimiento de trade-off, pero es insustancial como el tiempo que una buena comprensión del desarrollo de software.Siempre hay excepciones que requieren flexibilidad.

Por ejemplo, extremadamente intensivas de datos, operaciones por lotes deben ser manipulados en establecimientos especializados sprocs si es posible.Probablemente usted no desea enviar 100,000 enorme registros sobre el alambre si podía hacerlo en un procedimiento almacenado a la derecha en la base de datos.

Este es el tipo de problema que novato devs ejecutar en si se usa ORM o no.Pues solo hay que ver los resultados y si son competentes, se va a conseguir.

Lo que hemos visto en nuestra web apps es que generalmente los más difíciles de resolver cuellos de botella de rendimiento no están relacionadas con bases de datos, incluso con ORM.Más bien, tey está en el front-end (navegador) debido a que el ancho de banda, AJAX sobrecarga, etc.Incluso a mediados de la gama de servidores de bases de datos son una herramienta increíblemente poderosa en estos días.

Por supuesto, hay otras tiendas que trabajan en mucho mayor de alta demanda de sistemas pueden tener diferentes experiencias.:)

Los procedimientos almacenados de las manos hacia abajo.O miembros de la comunidad son específicos de cada idioma, y, a menudo, añadir gráficos de las ralentizaciones.

Los procedimientos almacenados significa que usted no está limitado por el idioma de la interfaz, y usted puede simplemente añadir nuevas interfaces para la base de datos en reenvía compatible maneras.

Mi opinión personal O miembros de la comunidad es su existencia pone de relieve una falla de diseño en el popular de la estructura de bases de datos.Desarrolladores de base de datos debe darse cuenta de las tareas que la gente está tratando de lograr con complicados O-Mappers y crear en el servidor de utilidades que ayudan en la realización de esta tarea.

O miembros de la comunidad también son épicas de los objetivos de la "fuga de abstracción de" síndrome de Joel On Software:Fugas De Abstracciones )

Donde es muy fácil encontrar las cosas simplemente no puede manejar debido a la capa de abstracción de no ser psíquico.

Los procedimientos almacenados son mejores, en mi opinión, porque pueden tener una independiente de la configuración de seguridad de las tablas subyacentes.

Esto significa que usted puede permitir operaciones específicas sin salida, lo que permite escribe/lee a tablas específicas.También limita el daño que pueden hacer las personas si se descubre que una de inyección de SQL explotar.

Definitivamente Orm.Más flexible, más portable (por lo general tienden a tener portabilidad incorporado).En el caso de la lentitud puede que desee utilizar el almacenamiento en caché o en la mano-tuned SQL en puntos calientes.

En general los procedimientos almacenados de tener varios problemas con la mantenibilidad.

  • independiente de la aplicación (muchos de los cambios tienen que hacerse ahora en dos lugares)
  • por lo general más difícil de cambiar
  • es más difícil de poner bajo el control de versiones
  • más difícil para asegurarse de que está actualizado (problemas de implementación)
  • portabilidad (ya mencionado)

Yo personalmente he encontrado que el SP tienden a ser más rápido rendimiento sabio, al menos para los grandes elementos de datos que puedo ejecutar sobre una base regular.Pero sé que hay muchas personas que juran O herramientas y no hacer NADA más.

Yo diría que el uso de una O mapper va a aumentar la legibilidad y mantenibilidad de las aplicaciones de código fuente, mientras que el uso de SP aumentará el rendimiento de la aplicación.

En realidad no son mutuamente excluyentes, aunque en su momento, ellos generalmente son así.

La ventaja de utilizar el mapeo Objeto Relacional es que usted puede cambiar las fuentes de datos.No sólo la estructura de base de datos, pero se puede usar cualquier fuente de datos.Con el advenimiento de los servicios web / arquitectura orientada al Servicio / ESB, en un mayor de la corporación, sería conveniente considerar la posibilidad de tener un mayor nivel de separación de las preocupaciones de lo que usted podría conseguir en procedimientos almacenados.Sin embargo, en las empresas más pequeñas y en la aplicación que nunca va a usar un origen de datos diferente, luego de SP puede encajar el proyecto de ley de multa.Y un último punto, no es necesario el uso de una O mapper para llegar a la abstracción.Mi ex equipo tuvo un gran éxito por el simple uso de un modelo de adaptador de uso Spring.NET conecte la fuente de datos.

@ Kent Fredrick

Mi opinión personal O miembros de la comunidad es su existencia pone de relieve una falla de diseño en el popular de la estructura de bases de datos"

Creo que usted está hablando acerca de la diferencia entre el modelo relacional y el modelo orientado a objetos.Esto es en realidad por qué necesitamos Orm, pero la implementación de estos modelos fueron hechos a propósito - no es un caudal de diseño - es sólo cómo las cosas resultaron ser históricamente.

El uso de procedimientos almacenados donde se han identificado un cuello de botella de rendimiento.si usted no ha identificado un cuello de botella, ¿qué estás haciendo con la optimización?
El uso de procedimientos almacenados de donde usted está preocupado acerca de la seguridad de acceso a una tabla en particular.
El uso de procedimientos almacenados cuando usted tiene un asistente SQL que está dispuesto a sentarse y escribir consultas complejas que unen las cargas de tablas en una base de datos heredados - para hacer las cosas que son difíciles en una O mapper.

El uso de la O mapper para el otro (al menos) el 80% de su base de datos:donde las selecciona y las actualizaciones son tan rutinario como para hacer que el acceso a través de procedimientos almacenados solo un inútil ejercicio en el manual de codificación, y donde las actualizaciones son tan poco frecuentes que no hay costo de rendimiento.El uso de una O mapper para automatizar la cosa fácil.

O la mayoría de miembros de la comunidad pueden hablar a los procedimientos almacenados para el resto.

Usted no debe usar procedimientos almacenados suponiendo que son más rápidos que una instrucción sql en una cadena, este no es necesariamente el caso en las últimas versiones de MS SQL server.

Usted no necesita el uso de procedimientos almacenados para frustrar los ataques de inyección SQL, hay otras maneras de hacerlo asegúrese de que sus parámetros de consulta son inflexibles y no sólo de cadena concatenada.

No es necesario el uso de una O mapper para conseguir un POCO de modelo de dominio, pero sí ayuda.

Si usted ya tiene una API de datos que se expone como sprocs, tendría que justificar una arquitectura importante revisión para ir a ORM.

Para los verdes campos de construir, me gustaría evaluar varias cosas:

  1. Si hay una dedicada DBA en el equipo, me gustaría lean para sprocs
  2. Si hay más de una solicitud de tocar la misma DB me gustaría lean para sprocs
  3. Si no hay ninguna posibilidad de migración de base de datos cada vez, me gustaría lean para sprocs
  4. Si estoy tratando de implementar MVCC en la DB, me gustaría lean para sprocs
  5. Si estoy en la implementación de este como un producto potencialmente múltiples backend dbs (MySql, MSSql, Oracle), me gustaría lean a ORM
  6. Si estoy en un corto plazo de tiempo, me gustaría lean a ORM, ya que es una manera más rápida de crear mi modelo de dominio y mantenerlo sincronizado con el modelo de datos (con el utillaje adecuado).
  7. Si estoy exponiendo el mismo modelo de dominio de múltiples maneras (aplicación web, servicios web, RIA cliente), voy a inclinarse a ORM como, a continuación, modelo de datos, es entonces oculta detrás de mi ORM fachada, haciendo un robusto modelo de dominio es más valioso para mí.

Creo que el rendimiento es un poco de un arenque rojo;hibernate parece funcionar tan bien o mejor que a mano el código SQL (debido a que la caché de niveles), y es fácil escribir un mal de consultas en el procedimiento almacenado de cualquier manera.

Los criterios más importantes son, probablemente, el equipo conjunto de habilidades y largo plazo de la base de datos de portabilidad necesidades.

Bien el de SP ya están allí.No tiene sentido que puede realmente.Supongo que no tiene sentido utilizar un mapper con SP?

"Estoy tratando de clavar el clavo.Debo usar el tacón de mi zapato o una botella de vidrio?"

Ambos Procedimientos Almacenados y Orm es difícil y molesto para el uso de un desarrollador (aunque no necesariamente para un DBA o arquitecto, respectivamente), debido a que incurren en los costos de inicio y de mayor costo de mantenimiento, que no es garantía de un pay-off.

Tanto va a pagar bien si los requisitos no se espera a cambiar mucho a lo largo de la vida útil del sistema, pero se meten en su camino si usted está construyendo el sistema para detectar las necesidades en primer lugar.

Recta-codificado SQL o cuasi-ORM como LINQ y ActiveRecord es mejor para construir a descubrir los proyectos (lo que suceda en la empresa mucho más que el PR quiere que usted piense).

Los Procedimientos almacenados son mejores en un lenguaje independiente del entorno, o donde un control de grano fino sobre los permisos que se requiere.También están mejor si el DBA tiene una mejor comprensión de los requisitos de sus programadores.

Completo de los Orm son mejores si se hacen Grandes el Diseño de la parte Delantera, el uso de un montón de UML, quiere a la abstracción de la base de datos back-end, y su arquitecto tiene una mejor comprensión de los requisitos de su DBA o programadores.

Y luego hay la opción #4:El uso de todos ellos.Todo un sistema, normalmente no es sólo un programa, mientras que muchos programas pueden hablar a la misma base de datos, cada uno podría utilizar cualquier método es adecuado tanto para el programa de la tarea específica, y por su nivel de madurez.Que es:empezar con derecho codificado SQL o LINQ, luego de madurez del programa de refactorización en ORM y Procedimientos Almacenados, donde se ve que tiene sentido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top