#mongodb
#mongodb
Вопрос:
В настоящее время я планирую свою схему MongoDB для предстоящего проекта, и в настоящее время я застрял.
В этом проекте; у игроков есть навыки, коллекции и несколько других вещей, которые необходимо обновлять в режиме реального времени. Они должны постоянно обновляться, например, когда игрок выигрывает бой в бою; их боевые навыки повышаются. Когда они находят определенный элемент, коллекция подсчитывается.
Мой вопрос в том, что было бы наилучшей практикой для этого? Вложенные документы или ссылки на отдельный документ?
Буду признателен за любые отзывы о моей текущей схеме!
{
"uuid": "f6ef95fa-913b-400b-bb76-71aba0fd1aed",
"playerName": "SomeRandomName",
"coins": 258725.00,
"exp": ,
"equipedPet": "",
"baseHealth": 100,
"baseDefense": 0,
"baseStrength": 0,
"baseSpeed": 100,
"baseCritChance": 0,
"baseCritDamage": 0,
"baseIntelligence": 0,
"baseSeaCreatureChance": 0,
"basemagicFind": 0,
"basePetLuck": 0,
"effectiveHP": 100,
"minionsUnlocked": 0,
"minionSlots": 5,
}
Буду признателен за любую помощь, которую вы можете оказать по этому вопросу
Комментарии:
1. Сколько игроков? Сколько серверов обращаются к этой базе данных? Если вам нужно обновлять несколько серверов в режиме реального времени с последними данными для каждого игрока, MongoDB может оказаться не лучшим выбором. В противном случае, если вопрос «вложенный документ или «объединенная» коллекция?» вы найдете много ответов здесь, обсуждая это. Иногда вы хотите вложить ее, иногда вы ее разделяете, лучше всего сделать свое программное обеспечение гибким, чтобы вы могли настроить его позже, если требования изменятся. например, позже вам нужно будет «атомарно» передавать оружие от одного игрока другому — может быть проще, если они находятся в отдельной коллекции.
2. Прежде всего, спасибо за ответ. Игроки, мы ожидаем где-то между 1000-10 000. Может быть выше, может быть ниже. Но это то, что мы планируем. Что касается нескольких серверов, технически да. Что бы вы посоветовали по поводу альтернативной базы данных?
3. ИТАК, совет: когда кто-то попросит разъяснений: обновите свой вопрос, чтобы все остальные увидели ваш ответ. Для получения кэшированных данных в режиме реального времени между всеми вашими серверами загляните в REDIS. Используйте MongoDB для долговременного сохранения (сохранения / загрузки), но для обновлений в реальном времени используйте redis.