Какой из них лучше для функции голосования - PullRequest
3 голосов
/ 06 июня 2011

Какая система лучше всего подходит для функции голосования и почему?;

  • Помещение голосов отдельно в таблицу базы данных и вычисление среднего значения, когда это необходимо

  • Наличие только одной строки для одного продукта.Когда придет новый голос, получите эту форму голосования, рассчитайте ее снова и обновите запись.например, у нас есть отчет о голосовании по продукту 1. Всего в базе данных проголосовало 326 человек, и проголосовало 45 человек.затем мы получаем новый голос, который равен 4 и для продукта 1. Мы берем запись из базы данных и затем выполняем следующую функцию:

(326 + 4) / (45+ 1)

затем снова сохраните его в базе данных с общим значением 330 и 46 как проголосовавших.

Я всегда выбираю первый вариант, но я хочу знать, что другиеделает.

Ответы [ 3 ]

3 голосов
/ 06 июня 2011

Ну, это всегда зависит от того, что вы хотите с дополнительной информацией о голосах.

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

Если все, что вас волнует, это конечный результат, второй вариант гораздо эффективнее.

1 голос
/ 06 июня 2011

Если вы хотите исключить возможность того, что люди могут голосовать дважды, вам в любом случае понадобится подход 1-row-per-vote, поэтому я рекомендую первый вариант.

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

0 голосов
/ 06 июня 2011

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

...