Как вы сохраняете и отображаете, проголосовал ли пользователь за что-то или нет?

Я работаю на сайте для голосования, и мне интересно как я должен обрабатывать голоса.

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

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

Вот мои идеи:

  • Напишите помощника, который будет проверять каждый вопрос, было ли проголосовано castted

    Это означает, что количество запросов будет зависеть от количества элементов, отображаемых на странице (обычно ~ 20).

  • Цикл для моих элементов получает идентификаторы, и для каждой страницы напишите запрос, который вернется, если голосование был преобразован или NULL

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

  • Когда пользователь входит в систему (или гость, для которого создан анонимный пользователь) получить все голоса, сохранить их в сеансе, если будет отдан новый голос, просто добавьте его в сеанс.

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

Как поживаете? Есть еще идеи?

8
задан JohnT 15 August 2011 в 12:16
поделиться