Я новичок в Meteor и Mongo, и у меня есть некоторые базовые вопросы проектирования баз данных.Дизайн базы данных Meteor для иерархической структуры
Предположим, что я делаю пошаговую стратегическую игру, такую как Advance Wars. Я не уверен, как структурировать свои данные.
Я сделал небольшой демо, где я сделал это в моем HTML:
{{#each chars}}
<div class='char' style={{get_style}}>
...
</div>
{{/each}}
И я этот помощник определен на Template.body:
Template.body.helpers({
chars: function() {
return Characters.find({});
},
...
})
Это прекрасно работает, когда у меня есть только один игра работает одновременно. Но я не уверен, как сделать эту работу, когда у меня есть несколько игр, работающих одновременно.
Я предполагаю, что один из способов сделать это - иметь коллекцию Игр. Каждая из этих Игр ссылается на двух или более игроков и каждого Игрока может иметь список символов. Каждый символ может иметь положение x и y. Но тогда я не уверен, какой запрос я бы заменил Characters.find({})
.
Я думаю, это может быть что-то вроде Game.findOne({game_id: game_id}).players[player_id].characters
. Но я не уверен, что последствия производительности там. Будет ли Метеор сбрасывать весь игровой объект каждый раз, когда движется персонаж? Я не совсем понимаю, что делает Метеор под капотом.
Я предполагаю, что другая возможность, которая потребует минимальных изменений, - сделать что-то вроде Characters.find({game_id: 123, player_id: 1})
. И тогда у меня будут все персонажи из всех игр в одной большой коллекции. Мне кажется странным, что у меня нет персонажей, «инкапсулированных» под Игры, но, возможно, это путь.
Фактически, теперь, когда я написал это, кажется, что второй вариант имеет больше смысла. И я думаю, что я бы определил все другие внутренние игровые объекты как отдельные коллекции. Это хороший способ обойти это?