В основном вы спрашиваете об эффективности и математике.
Вот что я бы сделал:
Ваша БД реляционная. Хорошо, ты понял. Каждый отзыв имеет числовое значение? Как 1 - 10?
Скажем, для этого примера.
Я бы сказал, что при каждом рассмотрении сам обзор устанавливается в БД, а также в очередь в таблице действий. Что-то, что имеет идентификатор элемента и тип действия. В этом случае вернемся.
Затем вы каждую минуту запускаете фоновый режим, проверяя эту очередь действий, и в случае нового обзора или набора проверок вы запускаете алгоритм для каждого применимого элемента, который собирает все данные, доступные в обзоре, и возвращает образованное число, основанное на стандартном отклонении коллективных данных.
Таким образом, математика не запускается пользователем в реальном времени или при отправке отзыва. Из всего, что мы знаем, у вас есть тонны предметов и тонны отзывов, поэтому в режиме реального времени было бы плохо, если ваш сценарий интеллекта тяжел.
Что касается стандартного отклонения, я проверяю множество вещей на наличие спама. Я храню все пользовательские данные, IP-адреса, дату и время и все, что могу, чтобы убедиться, что это не просто один парень, который входит в систему с разными учетными записями, просматривая свои собственные вещи с 10-балльной оценкой каждый раз. Не могу влюбиться в это.
Кроме того, если вы получите 100 10 отзывов, которые выглядят вполне законно, и 1 отзыв с оценкой 1, вы можете отбросить их как ненавистника и просто проигнорировать их в результатах.
Вы должны понимать, что ваш запрос огромен, поэтому фрагменты кода здесь не обсуждаются.
То, что я только что объяснил, было 4 месяца работы для огромного клиента и серьезного антиспам калькулятора.
удачи, хотя