Сортировка на основе расчета с помощью nhibernate - лучшая практика - PullRequest
1 голос
/ 13 февраля 2009

Мне нужно сделать пейджинг с порядком сортировки на основе расчета. Расчет похож на алгоритм Reddit, который зависит от времени - времени с момента создания.

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

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

Какой совет?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2009

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

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

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

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

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

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

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

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

0 голосов
/ 13 февраля 2009

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

...