Схема для пользовательских рейтингов - ключ / значение БД

Мы используем MongoDB, и я выясняю схему хранения рейтингов.

Рейтинги будут иметь значения 1-5.Я хочу хранить другие значения, такие какfromUser

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

РЕШЕНИЕ 1 - Класс отдельных рейтингов

Первой мыслью было создать отдельныйRatings Класс и хранить массив указателей наRatings вUser учебный класс. Причина, по которой я второй догадался, заключается в том, что нам придется запрашивать всеRatings объекты каждый раз, когда новыйRating приходит, чтобы мы могли пересчитать среднее

...

РЕШЕНИЕ 2 - Словарь в пользовательском классе

Вторая мысль заключалась в том, чтобы сохранить словарь вUser класс напрямую, что бы хранить этиRatings объекты. Это было бы немного легче, чем Решение 1, но мы переписали бы весьRatings История каждого пользователя каждый раз, когда мы обновляем. Это кажется опасным.

...

РЕШЕНИЕ 3 - Отдельный класс рейтингов с отдельными средними в классе пользователей

Гибридный вариант, где мы имеемRatings в своем собственном классе и массиве указателей на них, однако мы сохраняем два значения в пользовательском классе -ratingsAve а такжеratingsCount, Таким образом, когда устанавливается новый рейтинг, мы сохраняем этот объект, но мы можем пересчитатьratingsAve без труда.

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

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

Каков наилучший вариант для обеспечения последовательности, а также эффективности пересчета?

Ответы на вопрос(3)

Ваш ответ на вопрос