4 votes

NHibernate et la taille des lots

Je voulais savoir comment vous utilisiez, en général, la batch-size dans les mappings. En général, fixez-vous un certain nombre pour chaque collection mappée ? Bien entendu, je suis au courant des autres stratégies de récupération telles que join fetch mais je dois parfois filtrer lors du post-traitement, ce qui peut entraîner de nombreux chargements paresseux. J'ai découvert qu'en fixant la taille du lot à 100, par exemple, j'obtiens de bien meilleures performances dans ce cas.

Définissez-vous cette propriété de manière générale pour toute collection cartographiée ? Si ce n'est pas le cas, pourquoi ? Peut-il y avoir des inconvénients ?

4voto

Rippo Points 10580

Paramètres batch-size sur les collections ou sur les entités mères vont faire à peu près la même chose.

Ce qu'il faut faire batch-size est en fait en train de prendre une SELECT N+1 et de la transformer en une SELECT N/batch-size + 1 état.

Il y a un inconvénient, c'est qu'il faut faire la part des choses entre le bon chiffre et le mauvais. Si la taille du lot est trop grande, vous chargerez trop de données, si elle est trop petite, vous aurez encore trop de requêtes. L'équilibre à trouver est sujet à débat et il est impossible de le mesurer sans mettre en place des tests.

Je considère qu'il s'agit d'une micro-optimisation, importante car elle peut réellement réduire le problème de la sélection/n+1. Cependant, ce n'est pas aussi important que de sélectionner la bonne stratégie de récupération pour chaque scénario indépendamment, ce qui permet d'obtenir une meilleure stratégie globale.

Je pense également qu'il s'agit d'un problème de production et qu'il devrait être testé avec des utilisateurs réels et des données réelles.

Par ailleurs, je règle toujours mon batch-size pour être égale à la taille de ma pagination, ne me demandez pas pourquoi, c'est juste que ça me semble juste !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X