Как при использовании nhibernate определить оптимальный размер пакета в коде сопоставления? - PullRequest
8 голосов
/ 24 марта 2012

Я использую nhibernate, и у меня есть такой код в области отображения:

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

Мой вопрос: как мне определить, какое значение лучше всего поместить в .BatchSize? Должен ли я просто поставить большое число. Есть ли недостаток в том, чтобы ставить слишком большое число?

Ответы [ 3 ]

6 голосов
/ 24 марта 2012

На этот вопрос нет единого ответа.

Единственный способ определить, что лучше всего работает, - это профилировать приложение в работе , когда реальные пользователи делают реальные вещи. Это отнимает много времени, поэтому вы, вероятно, будете этим заниматься, только если обнаружите, что приложение работает медленно

Риск слишком большого числа состоит в том, что запрос с большим количеством параметров, извлекающих диапазон записей для каждой из них, может быть сложнее в БД, чем несколько небольших запросов.

Кроме того, если вы не используете все коллекции, на которые вы ссылались (например, если вы получили список посткатегорий, но вы показываете посты только для одной из них), вы можете загрузка большого количества данных без необходимости.

Мой совет - начинать с 20 или 50 (*) и увеличивать его, только если вам часто требуется более чем вдвое больше одновременно загружаемых коллекций.

(*): да, я снял эти цифры с моего торца. 50 - это то, что я использую по умолчанию.

2 голосов
/ 24 марта 2012

Несмотря на то, что он довольно старый, в блоге Айенде есть запись , в которой он сравнивает разные размеры партий (поверьте 10, 25, 250).Проверьте это.Это может быть полезно для вас.

1 голос
/ 25 марта 2012

Я обычно устанавливаю для моего batch-size то же значение, что и размер моей страницы в графическом интерфейсе.

Так что, если мой размер страницы 25, то и размер моей партии. У меня нет доказательств того, что это хороший выбор, но если просто чувствует мне.

Тем не менее, единственно верный способ - следовать тому, что написал @Diego, запустить профилировщик на живом сервере в течение недели и проанализировать результаты. Измените размер пакета на другую неделю и проанализируйте оба результата. Много работы я подозреваю!

Я бы не рекомендовал высоко значение, поскольку это может оказать негативное влияние. Другой способ взглянуть на это - если ваш размер пакета слишком велик, то вы, возможно, возвращаетесь ко многим записям в операторе выбора.

...