Рейтинг-страница - где рассчитывать большие вещи (база данных или код)? - PullRequest
1 голос
/ 03 марта 2011

У меня есть страница рейтинга игроков новой игры с огромной базой данных:

  • У нас есть один мир.
  • В каждом мире есть X осколков (~ 200).
  • Каждый осколок имеет 2 фракции.
  • У каждого осколка есть X гильдий.
  • Гильдия имеет 1 осколок, 1 фракцию и, конечно, один мир.
  • Гильдия будет ранжироваться по убийству босса.

Я вычислю ранг гильдии в мире, в осколке и во фракции. Я сохраняю только очки BossKills в базе данных.

Таким образом, у меня очень и очень большие расчеты каждый раз, когда открывается сайт, в котором отображается рейтинг. Как сделать этот расчет максимально быстрым?

Моя идея состоит в том, чтобы либо создать представление, позволить представлению выполнить вычисление и получить только информацию назад или получить всю необходимую мне информацию и рассчитать ее в коде.

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Я бы определенно сделал расчет в вашей базе данных.Информация есть.Возвращайте только те данные, которые необходимо отобразить, чтобы уменьшить передачу данных и время процессора для вашего кода.

Возможно, чтобы помочь вам с другой точки зрения:

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

tblRank

UserId |Score_in_guild (целое число) |...

3 голосов
/ 03 марта 2011

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

0 голосов
/ 03 марта 2011

Насколько большими должны быть данные для передачи и насколько интенсивными являются вычисления?

Большие объемы данных предпочтительнее при расчете сторонних данных, поскольку вы избегаете их передачи. Если вы просто суммируете несколько очков, а затем упорядочите их, сделайте это в БД.

Вычисление, являющееся дорогим или сложным, способствует выполнению этого в вашем приложении. Поскольку масштабирование приложения намного проще, чем масштабирование БД. И, конечно, лучше писать сложные алгоритмы в коде с полной поддержкой отладчика и IDE.

А если это дорого, почему вы пересчитываете каждый раз, когда отображается страница рейтинга? Либо кэшируйте информацию на минуту, либо просто обновляйте ее, когда гильдия набирает очки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...