Какой из них лучше для функции голосования

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

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

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

(326 + 4) / (45 + 1)

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

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам