Внедрение системы рейтинга - PullRequest
1 голос
/ 29 июня 2009

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

Одна мысль состоит в том, чтобы иметь таблицу голосов, которая регистрирует каждый голос, а затем либо сразу, в запланированное время, либо при каждой загрузке продукта (это кажется неэффективным, но, возможно, нет), голоса подсчитываются и удваиваются между 0 и 5 обновляются в записи продукта в таблице продуктов.

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

Или есть лучший способ сделать это, чего у меня нет? Я хотел бы просто иметь поле «рейтинг» в таблице продуктов, но не могу придумать, как обновить голоса без каких-либо дополнительных данных.

Опять же, целостность данных важна, но ни в коем случае не нужна, какие-либо мысли?

Ответы [ 3 ]

1 голос
/ 29 июня 2009

Я бы вел "оценку" с вашими продуктами, но также вел бы таблицу голосования, чтобы увидеть, кто за что проголосовал. А когда кто-то голосует, вставьте голос, обновите оценку продукта.

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

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

0 голосов
/ 02 июля 2009

Я согласен с Оли. Кроме того, вы можете кэшировать свой счет. Таким образом, вы обновляете счет продукта в кеше, и ваше приложение всегда выбирает значение кеша. Таким образом, даже при обновлении страницы вы получите последний результат, не обращаясь к базе данных.

0 голосов
/ 29 июня 2009

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

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

...