Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top