Как вы предварительно рассчитываете систему подсчета очков из базы данных? - PullRequest
3 голосов
/ 21 марта 2011

Stackoverflow отображает вашу репутацию рядом с вашим именем пользователя. Я полагаю, что он не попадает в базу данных, чтобы вычислить ваш счет на каждой странице рендеринга (или, возможно, так и есть) Будет ли в таблице пользователей поле общего балла, которое обновляется, когда кто-то голосует против меня?

Какова наилучшая практика для подобных систем? Извините, если это очевидный вопрос, я новичок в базах данных.

Ответы [ 2 ]

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

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

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

Когда вы ходите по веб-сайту и делаете что-то, свойство обновляется, но не база данных.

Затем вы можете обновить базу данных только один раз, когда пользователь объекта уничтожен (либо при выходе из системы, либо при закрытии браузера), либо по истечении определенного периода времени.

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

Я думаю, что общий ответ на такой общий вопрос: кеширование! Идея кэширования может быть простой, но это не всегда легко сделать правильно. Я предполагаю, что SO хранит не только ваш общий балл. Он хранит все «события», которые добавляют к вашему счету. Ваш общий балл рассчитывается из этих "событий". Таким образом, к общему счету это уже какое-то предварительно рассчитанное или кэшированное значение. Если вы не хотите использовать базу данных для каждого запроса, вы можете кэшировать значения в памяти. Memcached часто используется для таких работ, но, конечно, есть и другие варианты.

...