Я использую MongoDB, Mongoose и Node для хранения информации о пользователе для игры.Несколько схем в MongoDB (с использованием Mongoose)
У меня есть ситуации, когда я ищу, чтобы иметь два сета записей для игры: 1. Пользователи 2. Лидер совета
информации пользователя охватывает такие вещи, как имя пользователя, пароль, номер игры- играет и верхние 5 баллов пользователя. У меня в настоящее время есть схема, настроенная для этого, и она работает безупречно.
Теперь меня попросили добавить LeaderBoard, который должен показать 10 лучших результатов для всех пользователей. Я хотел бы создать отдельную запись для этого в той же базе данных, чтобы избежать проверки всех записей пользователей и фильтрации для отображения таблицы лидеров. Я бы предпочел просто ограничить коллекцию лидеров до 10 записей, и каждый раз, когда пользователь завершает игру, проверяйте их счет против этой коллекции, чтобы увидеть, должны ли они находиться на лидирующей доске. Я новичок в mongo/mongoose и не знаю, как наилучшим образом подойти к этому.
Любые советы будут оценены.
Я уверен, что это проблема, с которой кто-то сталкивался в прошлом, и если она была здесь покрыта, я извиняюсь, но я искал и не смог найти что-то подобное.
Gustav, Благодарим за отзыв! Разве это не становится хитом производительности, если я доберусь до точки, где я говорю, 3000 пользователей, все из которых сохранены 5 баллов? Кроме того, при любом раунде игры несколько одновременных пользователей могут получить доступ к одной и той же функциональности - это игра-викторина - пользователи удаляются из игры, когда им не хватает трех вопросов ... Кажется, что это может нести необязательно большая нагрузка на сервер. –
Да, это, вероятно, было бы; во всяком случае, вы всегда будете держать верхний X в таблице лидеров, не так ли? Если это так, было бы неплохо сделать коллекцию 'leaderboard' как [закрытой] (http://docs.mongodb.org/manual/core/capped-collections/) :) – gustavohenke
Еще раз спасибо за направление. Это похоже на решение, которое необходимо, однако исходный отклик действительно работал очень хорошо. –