2012-03-24 22 views
7

estoy usando NHibernate y tengo código como este en el área de mapeo:Cuando uso nhibernate, ¿cómo puedo averiguar el tamaño óptimo del lote en el código de mapeo?

HasMany(x => x.People).AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80); 
    HasMany(x => x.Clothes).AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(150); 

Mi pregunta es, ¿Cómo puedo averiguar cuál es el mejor valor para poner en .BatchSize? ¿Debo simplemente poner un número alto? ¿Hay algún inconveniente en poner un número demasiado alto?

+1

También puede controlar el tamaño del lote en la sesión de código utilizando session.SetBatchSize() –

Respuesta

5

No hay una sola respuesta a esta pregunta.

La única manera de determinar qué funciona mejor es perfilar la aplicación en la producción, con usuarios reales haciendo cosas reales. Esto lleva mucho tiempo, por lo que es probable que solo lo haga si encuentra que la aplicación es lenta

El riesgo de un número demasiado alto es que una consulta con muchos parámetros recupera un rango de registros para cada uno podría ser más difícil en la base de datos que algunas consultas más pequeñas.

Además, si usted es no utilizando todas las colecciones de que ha indicado (por ejemplo, si ha recuperado una lista de PostCategories, pero sólo se muestran los mensajes de uno de ellos), es posible que se carga un montón de datos innecesariamente.

Mi consejo es comenzar con algo así como 20 o 50 (*) y hacerlo más alto solo si a menudo encuentra que necesita más del doble de esa cantidad de colecciones cargadas simultáneamente.

(*): sí, saqué esos números de mi trasero. 50 es lo que actualmente uso por defecto.

2

Aunque bastante viejo, hay un blog entry de Ayende, donde compara diferentes tamaños de lote (crea 10, 25, 250). Echale un vistazo. Puede serle útil.

+1

La publicación del blog trata sobre la inserción/actualización/eliminación de lotes, no la carga de la colección. –

1

Generalmente configuro mi batch-size con el mismo valor que el tamaño de mi página de la GUI.

Entonces, si el tamaño de mi página es 25, también lo es el tamaño de mi lote. No tengo ninguna evidencia de que este sea un buen valor para elegir, pero si solo se siente me corresponde a mí.

Sin embargo, dijo que la única manera verdadera es seguir lo que @Diego ha escrito, ejecutar un generador de perfiles en el servidor en vivo durante una semana y analizar los resultados. Cambie la ejecución del tamaño del lote por otra semana y analice ambos resultados. ¡Mucho trabajo, sospecho!

No recomendaría un valor alto ya que podría tener un impacto negativo. Otra forma de ver esto es si el tamaño del lote es alto, entonces es posible que regrese a muchos registros en la declaración seleccionada en primer lugar.

Cuestiones relacionadas