2014-12-13 3 views
1

Я исхожу из фона реляционной базы данных и все еще пытаюсь понять, как хранить данные, которые были бы реляционными в базе данных NoSQL (или объекте JSON).Лучший способ организовать данные JSON для MongoDB

Мой вопрос: как я могу хранить данные о деревнях? В каждой деревне есть пользователь, прикрепленный к нему, и каждая деревня имеет координату X и Y. Это объект, который может выглядеть так:

var map = [{ 
    x: 1, 
    y: 1, 
    terrainType: land, 
    village: { 
    mayor: jragon, 
    population: 150, 
    gold: 100, 
    iron: 25, 
    garrason: { 
     archers: 4, 
     knights: 1 
    }, 
    buildings: { 
     smith: { 
     level: 4, 
     upgradeFinish: false; 
     }, 
     mill: { 
     level: 2, 
     upgradeFinish: 'some date/time...' 
     } 
    } 
    } 
}]; 

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

Даже с этим объектом все еще существует некоторый аспект отношения. map.village.mayor ссылается на пользователя в другой коллекции.

Коллекция карт используется для рисования карты каждый раз. При рисовании карты она решает, какую плиту использовать на каком уровне деревня.

Извините, если я не прояснил себя!

+1

В вашем дизайне нет ничего принципиально неправильного. Мэр, как правило, хранится как идентификатор документа в коллекции «люди», хотя, чтобы избежать необходимости для операций типа «join» и нескольких обращений к БД или специальных запросов, некоторая информация, необходимая для мэра, также может быть сохранена прямо в деревенском столе. –

+0

Хорошо. Скажем, вы хотели найти все деревни, связанные с пользователем. Обычно вы присоединяетесь к дереву таблицы user_id. Но здесь вы бы искали объекты, где map.village.mayor = user_id? Лучше иметь 3 отдельные коллекции; пользователей, карт и деревень? Затем выполните команду psudo-join? – Jragon

ответ

1

Чтобы иметь хороший дизайн схемы в MongoDB, вам действительно нужно заботиться о запросах, которые вы часто будете делать.

Есть несколько вещей, чтобы принять во внимание:

  • Ваши запросы должны быть правильными в отношении пределов MongoDB (нет транзакций, на уровне документа атомарность, никакого реального не присоединиться ...)
  • Ваши запросы должны в идеале быть простым в кодировании.
  • Вы должны иметь возможность использовать индексы правильно. Если каждый запрос может использовать индекс для чтения данных, которые вы не являетесь, а не намного больше, то вы проделали хорошую работу.
  • Название ключей дублируется в каждом документе. Вы можете сократить имена, но я бы предпочел сделать это автоматически или совсем не.

Если вы хотите узнать, я бы предложил вам по крайней мере половину книги «Монгодские прикладные образцы дизайна» Рика Коупленда. Ваш вопрос и контекст могут быть слишком широкими, чтобы даже приспособиться к stackoverflow.

+0

здравый смысл не так распространен. –

+0

@Gabe Rainbow: Я не уверен в переводе того, что я рассказываю в этом комментарии, но я попытался выучить уроки того, кто сказал что-то вроде «я, конечно, лучше, если говорить»;) – dotpush

+0

@Gabe Rainbow: И я просто пропустил это [«здравый смысл не так распространен» - идиоматический] (http://en.wikipedia.org/wiki/Wikipedia:Common_sense_is_not_common) на английском языке. Определенно доказательство того, что вы сказали! – dotpush

Смежные вопросы