Какой из них лучше для функции голосования
Какая система лучше всего подходит для функции голосования и почему?;
Распределение голосов отдельно внутри таблицы базы данных и вычисление среднего значения, когда это необходимо
Наличие только одного ряда для одного продукта. Когда придет новое голосование, получите эту форму голосования, рассчитайте ее снова и обновите запись. например, у нас есть отчет о голосовании по продукту 1. Всего в базе данных проголосовало 326 человек, и проголосовало 45 человек. затем мы получаем новый голос, который равен 4 и для продукта 1. Мы берем запись из базы данных и затем выполняем следующую функцию;
(326 + 4) / (45 + 1)
затем снова сохраните его в базе данных с общим значением 330 и 46 как проголосовавших.
Я всегда выбираю первый вариант, но я хочу знать, что делают другие.
3 ответа
Ну, это всегда зависит от того, что вы хотите с дополнительной информацией о голосах.
Если вы хотите узнать, например, тренды в голосовании (среднее значение идет вверх или вниз), или вы хотите узнать его, то голоса относительно старые / новые или какой пользователь проголосовал (проверка 1 голос за человека)) и т. д. и т. д. Вы хотите сохранить каждый голос в отдельной таблице.
Если все, что вас волнует, это конечный результат, второй вариант гораздо эффективнее.
Если вы хотите скрыть, что люди могут голосовать дважды, вам понадобится 1-row-per-vote
подходи в любом случае, поэтому рекомендую первый вариант.
Второй вариант может быть лучше с точки зрения производительности, но если это когда-либо будет проблемой, легко использовать механизм кэширования.
Есть много факторов, чтобы рассмотреть. Вам нужно защищаться от атак на ваш сервер приложений и изменения подсчета голосов? Вы обеспокоены тем, что голоса людей могут быть обнаружены? Вы обеспокоены проблемами производительности, связанными с блокировками? Все это повлияет на решение, и ответы на них сильно различаются в зависимости от конкретного сценария.