Как при использовании nhibernate определить оптимальный размер пакета в коде сопоставления?
Я использую 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 ответа
На этот вопрос нет однозначного ответа.
Единственный способ определить, что лучше всего работает, - это профилировать приложение в работе, когда реальные пользователи делают реальные вещи. Это отнимает много времени, так что, вероятно, это то, что вы будете делать, только если вы обнаружите, что приложение работает медленно
Риск слишком большого числа состоит в том, что запрос с большим количеством параметров, извлекающих диапазон записей для каждой из них, может быть сложнее в БД, чем несколько небольших запросов.
Кроме того, если вы не используете все коллекции, на которые ссылались (например, если вы получили список посткатегорий, но вы показываете посты только для одной из них), возможно, вы загружаете много данных без необходимости.
Мой совет - начинать с 20 или 50(*) и увеличивать его только в том случае, если вам часто требуется более чем вдвое больше одновременно загруженных коллекций.
(*): да, я снял эти цифры с моей задницы. 50 - это то, что я сейчас использую по умолчанию.
Я вообще поставил batch-size
к тому же значению, что и размер моей страницы GUI.
Так что, если мой размер страницы 25, то и размер моей партии. У меня нет никаких доказательств того, что это хороший выбор, но если он мне кажется правильным.
Тем не менее, единственно верный способ - следить за тем, что написал @Diego, в течение недели запускать профилировщик на живом сервере и анализировать результаты. Измените размер пакета на другую неделю и проанализируйте оба результата. Подозреваю, много работы!
Я не рекомендовал бы высоко значение, так как это может оказать негативное влияние. Другой способ взглянуть на это - если ваш размер пакета велик, то вы, возможно, возвращаетесь ко многим записям в операторе выбора.