2012-04-26 2 views
4

Я хотел спросить, как вы, ребята, вообще используете batch-size в сопоставлениях. Вы вообще устанавливаете определенный номер в любой сопоставленной коллекции? Конечно, я знаю о других стратегиях получения, таких как join fetch, но иногда мне приходится фильтровать во время постобработки, что может спровоцировать лот ленивой загрузки. Я понял, установил ли размер партии, например. до 100, я имею гораздо лучшую производительность в таких случаях.NHibernate и размер партии

Вы устанавливаете это свойство в общем случае в любой отображаемой коллекции? Если нет, почему бы и нет? Может ли быть какой-то недостаток?

Thx для любого входного sl3dg3

ответ

4

Установка batch-size на сборниках или на родительских организаций собираются в значительной степени сделать то же самое.

batch-size действительно делает то, что делает SELECT N+1 вопрос и превращает это в состояние SELECT N/batch-size + 1.

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

Я рассматриваю это как микро-оптимизацию, которая важна, поскольку она действительно может уменьшить проблему выбора/n + 1. Однако на самом деле это не так важно, как выбор правильной стратегии отбора для каждого сценария независимо, что делает лучшую стратегию в целом.

Я также думаю об этом как о проблеме производства и должен быть протестирован против реальных пользователей от реальных данных.

В качестве побочного примечания я всегда устанавливал свой batch-size равным размеру моего подкачки, не спрашивайте меня, почему он просто чувствует себя хорошо!

+0

Как можно загружать слишком много данных? Его нужно как-то загружать. Насколько я понимаю «пакетный размер», он группирует только множество разных запросов и сразу же отправляет их в базу данных. – sl3dg3

+0

может быть, возможно, нет, если вы не используете все коллекции, на которые вы ссылались, например. вы получаете 1000 комментариев, но вы показываете только комментарии для первых 25, которые будут загружаться без необходимости. Также запрос с большим количеством параметров 'может быть сложнее в БД, чем несколько меньших запросов. Вот почему я рекомендовал настроить тестирование – Rippo

+0

Ah - я думал, что если я определяю lazy = "true", размер пакета не вызовет ничего, если данные не будут доступны в коде? Я бы не ожидал, что Hinbernate будет загружать что-нибудь в этом случае без необходимости ... – sl3dg3

 Смежные вопросы

  • Нет связанных вопросов^_^