Mongo DB Design для календаря событий - PullRequest
3 голосов
/ 22 ноября 2011

У нас есть календарь событий, и вот что я думаю о нашей базовой схеме монго:

пользователей

  • имя пользователя
  • пароль
  • соль

события

  • имя
  • описание
  • теги []
  • категория
  • venue_id ...

места проведения

  • имя
  • адрес
  • loc

Запросы, которыебудет сделано следующее:

  • Список различных тегов (это может быть сложно, учитывая текущий дизайн)
  • события в данном теге
  • Информация о событии вместе с местом проведенияlocation
  • Вся информация о событии и месте проведения определенного события
  • Все события рядом со мной.Вам нужно использовать географический индекс для loc

Есть ли какие-либо отзывы / идеи о том, следует ли нам размещать места внутри событий или использовать вместо этого mysql?

1 Ответ

4 голосов
/ 23 ноября 2011

Хорошо, это выглядит довольно хорошо. Давайте построим некоторые из запросов.

Предполагается, что коллекции именуются пользователями, событиями, местами проведения:

  • Вставить несколько фиктивных событий :

    db.events.insert ({теги: [ "удивительный", "весело", "круто"]})

    db.events.insert ({теги: [ "сладкий", "весело", "рад"]})

  • Сделать индекс (как у босса)

    db.events.ensureIndex ({теги: 1})

  • Список различных тегов (это может быть сложно, учитывая текущий дизайн) :

    Нет, не сложно.

    db.events.distinct ( "метка")

    ["круто", "круто", "весело", "рад", "сладко"]

  • События в данном теге (вы имели в виду «с данным тегом», верно?)

    db.events.find ({tags: "fun"})

    {"_id": ObjectId ("4ecc08c62477605df6522c97"), "tags": ["awesome", "fun", "cool"]}

    {"_id": ObjectId ("4ecc08d92477605df6522c98"), "tags": ["sweet", "fun", "rad"]}

  • Информация о событии вместе с местом проведения

    Вы можете сделать это несколькими разными способами. Одним из способов будет запрос о событии и последующий запрос места. С обоими документами объедините (объедините) нужные данные вручную.

    OR

    Вы можете немного денормализовать и сохранить кэшированные названия мест + месторасположения (но не детали места, такие как часы работы, максимальная занятость, веб-сайт, номер телефона и т. поставляется со стандартным предупреждением о денормализации, заключающимся в невозможности обновления ваших данных в одном месте.

  • Вся информация о событии и месте проведения определенного события

    См. Выше

  • Все события рядом со мной. Нужно использовать географический указатель на loc

    Снова два запроса, та же концепция, что и выше, только в обратном порядке.

    Получить места проведения:

    db.venues.find ({loc: {$ near: [lat, lon]}})

    Получить события, используя идентификаторы места проведения:

    db.events.find ({место проведения: {$ in: [id1, id2, id3 ...]}})

Некоторые из этих вещей могут быть выполнены автоматически для вас, если вы используете ODM.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...