2009-02-12 2 views
1

Мне нужно выполнить подкачку с порядком сортировки на основе расчета. Вычисление похоже на что-то вроде алгоритма горячности reddit в том, что оно зависит от времени - времени после создания сообщения.Сортировка на основе расчета с помощью nhibernate - лучшая практика

Мне интересно, какая лучшая практика для этого будет. Нужен ли этот тип как функция SQL или запускать обновление раз в час, чтобы вычислить всю таблицу.

В таблице представлены сотни тысяч строк. И я использую nhibernate, так что это может вызвать проблемы для запланированного полного расчёта.

Любые советы?

ответ

0

Если вы можете выполнить вычисление с использованием SQL, попробуйте использовать Hibernate для загрузки отсортированной коллекции, выполнив SQLQuery, где ваш запрос включает выражение «ORDER BY».

2

Скорее всего это будет зависеть от нагрузки на вашем сервере. Несколько предположений для моего ответа:

  1. Ваш расчет, скорее всего, не просто, но принимать во внимание целый ряд факторов, в том числе время, прошедшее с поста

  2. Вы ожидали, по крайней мере разумный рост ваш сайт, то есть новые данные будут добавлены в вашу таблицу.

Я бы предположил, что ваша лучшая ставка будет заключаться в том, чтобы рассчитать и сохранить ваше ранжирующее значение, а так как Nuno G упоминается о получении с помощью упорядоченного предложения. Как вы обратите внимание, что, вероятно, будут некоторые последствия, два из которых были бы:

  1. Планирование обновлений
  2. Обеспечение доступа к таблице

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

Вы также захотите свести к минимуму блокировку вашего стола во время пересчета. Существует несколько способов сделать это, включая настройку уровней изоляции (используя терминологию MS SQL). Если вы действительно волнуетесь, вы даже можете выполнить свои вычисления извне (например, в таблице temp), а затем просто запустите обновление значений в своей основной таблице.

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

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