9

He estado echando un vistazo breve a NHibernate y Linq2Sql. También tengo la intención de echar un vistazo a Entity Framework.¿Puede Persistence Ignorance Scale?

La pregunta que se plantea, cuando hablo de estos ORM es "No pueden escalar", ¿o sí? De Google me da la impresión de que pueden escalar bien, pero en última instancia, supongo que debe haber un precio que pagar. ¿Vale la pena pagar por una capa empresarial más sencilla y rica?

+0

¿Qué quiere decir con escalar la persistencia/ORMs? –

+0

jaja, esta pregunta es –

+0

Entonces, en nuestra aplicación web el cuello de botella es la base de datos, como resultado, hasta cierto punto, nuestra lógica empresarial se basa en lo que es mejor para la base de datos. La ignorancia de la persistencia daría una capa de negocios más flexible y más rica a expensas de la base de datos. ¿Al escalar puede permitirse ser Ignorante de persistencia? – danswain

Respuesta

5

Esta es una buena pregunta, y en mi humilde opinión pueden escalar tan bien como cualquier DAL personalizado. Solo he usado nHibernate, así que me centraré solo en él y en las características que tiene, que pueden ayudar a escalar un sistema.

  • Lazy Loading - Dado que admite la carga diferida, puede evitar la carga de elementos extraños. Por supuesto, debe tener cuidado con el problema Select n + 1, pero hay cosas en el sistema para evitarlo.
  • Obtención ardua: hay varias formas de buscar con impaciencia los objetos que pueda necesitar, lo que le permite evitar viajes adicionales a SQL.
  • Caché de segundo nivel: nHibernate tiene soporte para un caché de segundo nivel que se puede usar para aumentar la escalabilidad al reducir los viajes al DB. Hay varios proveedores de respaldo disponibles que le dan cierta flexibilidad.
  • Escriba su propio SQL: en nHibernate puede llamar a procedimientos almacenados o proporcionar la consulta SQL en línea que devolverá sus entidades. Esto le permitirá usar su propio SQL cuando el sql generado no lo corte. Por ejemplo, ansioso de cargar un árbol de auto unión utilizando 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á muchos ganchos que le permitirán optimizar un poco. Solo necesitas pasar un tiempo aprendiéndolo.

También creo que si tiene un área de código de rendimiento crítico y no puede lograr que su ORM funcione dentro de sus requisitos, entonces puede crear su propia capa DAL para esa pequeña área de su aplicación. 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

+0

Esto me hace pensar que los ORM son lo suficientemente astutos como para facilitar el escalamiento en algunas circunstancias y tener la flexibilidad de personalizarse. ¿Debería ser la opción predeterminada al construir un sitio que pretendes escalar? – danswain

+0

Creo que son la opción predeterminada independientemente de la escalabilidad, ya que simplifican el desarrollo y reducen la cantidad de código que escribimos y mantenemos. Todavía podía escribir manualmente código más rápido que un ORM; sin embargo, me lleva más tiempo construirlo y mantenerlo – JoshBerke

2

Hibernate Shards está siendo ported to NHibernate, lo que permitirá la escala horizontal.

También hay algunos hacks muy interesantes como this one para implementar sharding.

Así que la respuesta es sí, NHibernate puede escalar, de forma persistente e ignorante y completamente transparente.

1

Es simplemente incorrecto decir que las aplicaciones integradas en un ORM no se adaptan bien. Ciertamente, ha sucedido antes de que los desarrolladores descuidados o perezosos abusen de un ORM al escribir código que genera SQL horriblemente ineficiente. Construir aplicaciones de alto rendimiento significa entender algo acerca de lo que realmente hacen las hermosas abstracciones debajo del capó. Sin embargo, no se necesita mucho para mantenerse fuera de esta trampa. Usar un ORM no significa nunca abrir el generador de perfiles SQL o NHibernate Profiler.

Y en cuanto a la afirmación de que los SP son mucho más rápidos, lea this y this. Y además, los ORM (al menos NHibernate) le dan formas bastante sencillas de usar SP si alguna vez lo necesita.

Cuestiones relacionadas