Pregunta

He tenido un breve vistazo a NHibernate y Linq2Sql. También estoy con la intención de tener un vistazo al marco de la entidad.

La pregunta que consigue levantado, cuando hablo de estas ORM es "No pueden escalar", por lo que pueden? Desde Google me da la impresión de que son capaces de escalar bien, pero al final supongo que debe haber un precio a pagar, ¿Vale la pena pagar por una capa de negocio más simple más rico.

¿Fue útil?

Solución

Esta es una buena pregunta, y en mi humilde opinión que puede escalar tan bien como cualquier DAL personalizado. Sólo he utilizado NHibernate así que voy a centrarse sólo en él y las características que tiene que pueden ayudar a la escala de un sistema.

  • Lazy Loading - ya que soporta la carga diferida se puede evitar cargar ningún artículo unnessecary. Por supuesto que necesita mirar hacia fuera para la Selección de n + 1 problema, sin embargo hay cosas en el sistema para evitar esto.
  • Eager Fetching - Hay varias maneras para acarrear con impaciencia objetos que es posible que necesite que le permite evitar viajes adicionales a SQL
  • .
  • Segundo Nivel caché - NHibernate tiene soporte para una caché de segundo nivel que puede ser utilizado para aumentar la escalabilidad mediante la reducción de los viajes a la base de datos. Hay varios proveedores de soporte disponibles que le dan cierta flexibilidad.
  • Escriba su propia SQL - En NHibernate puede llamar a procedimientos almacenados, o proporcionar la línea de consulta SQL que devolverá sus entidades. Esto le permitirá utilizar su propio SQL cuando el SQL generado no es suficiente. Por ejemplo ansiosos de cargar un auto árbol de unión mediante una consulta recursiva.

Ahora dicho esto, creo que es más fácil de ajustar inicialmente una capa DAL costumbre porque su son íntimo con su construcción y se puede ajustar con precisión ella; Sin embargo, un buen ORM proporcionará un montón de ganchos que le permiten optimizar un poco. Sólo tiene que pasar algún tiempo aprendiendo a él.

también siento que si usted tiene un área crítica rendimiento del código y no se puede obtener su ORM para trabajar dentro de sus requisitos, entonces para esa pequeña área de su aplicación se puede construir a medida de su propia capa DAL. Si estás usando un patrón de diseño decente como un repositorio creado por una fábrica, entonces todo lo que necesita hacer es cambiar a cabo la ejecución de su repositorio

Otros consejos

Hibernate Fragmentos está siendo portado a NHibernate , lo que permitirá la escala horizontal.

También hay algunos trucos muy interesantes como éste para implementar sharding.

Así que la respuesta es sí, NHibernate puede escalar, de manera persistencia-ignorante y totalmente transparente.

Es simplemente incorrecto decir que las aplicaciones construidas en un ORM no escala bien. Ciertamente ha sucedido antes de que los desarrolladores por descuido o perezosos abusan de un ORM escribiendo código que genera SQL terriblemente ineficiente. La creación de aplicaciones performant significa entender algo de lo que todos los preciosos abstracciones hacer realmente bajo el capó. No se necesita mucho para mantenerse al margen de esta trampa sin embargo. El uso de un ORM no quiere decir que nunca abrir el Analizador de SQL o NHibernate Profiler .

Y con respecto a la afirmación de que los SP son sólo un conjunto mucho más rápido, lee este y este . Y, además, ORM (NHibernate, por lo menos) que dan formas bastante fácil de usar SP si alguna vez necesita.

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