оптимизация базы данных - есть общее поле или таблица запросов? - PullRequest
1 голос
/ 25 декабря 2010

У меня есть приложение, в котором пользователи получают очки за действия, которые они выполняют - 1 балл за простое действие или 2 балла за сложное. Я хочу показать пользователю общее количество баллов, которые он получил в моем приложении, и баллы, полученные на этой неделе (с понедельника в полночь).

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

У меня есть две альтернативы, и я не уверен, что лучше:

  1. Каждый раз, когда пользователь видит отчет, выполняйте запрос и суммируйте полученные им баллы
  2. Добавьте два поля каждому пользователю, в котором записано количество набранных баллов (общее и еженедельное). Значение еженедельных пунктов будет установлено равным 0 каждый понедельник в полночь.

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

Второй вариант предполагает риск несоответствия между таблицей действий и итоговыми значениями.

Мне очень интересно, что вы считаете лучшей альтернативой здесь.

Спасибо, Dorian

Ответы [ 2 ]

0 голосов
/ 25 декабря 2010

Оба решения будут работать одинаково хорошо. Вы сами все делаете правильно: первый вариант будет немного проще в реализации, но он должен будет суммировать результаты каждый раз, когда пользователь заходит на страницу результатов. С другой стороны, для второго варианта вам нужно всего лишь добавить и поддерживать 2 дополнительных атрибута в пользовательской таблице. Это вряд ли поставит под угрозу целостность вашего приложения, если вы будете тщательно программировать.

0 голосов
/ 25 декабря 2010

Выберите первый вариант. Масштаб позже

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

Моя точка зрения взята из книги 37 сигналов "Как стать реальностью", глава 4 - Масштабировать позже http://gettingreal.37signals.com/ch04_Scale_Later.php

...