MongoDB, когда хранить документ вложенным в другой, а когда в отдельной коллекции

12 февраля, 2012

Задача: хранить авторов к публикациям.
Делема: хранить авторов в отдельной коллекции или внутри документа публикации?

Решение #1:

{
  "_id" : ObjectId("4dd491695072aefc456c9aca"),
  "username" : "alphareplicant",
  "email" : "roybatty@androids.org",
  "fullname" : "Roy Batty",
  "joined_at" : ISODate("2011-05-19T03:41:29.703Z"),
  "address" : {
    "street" : "13 Tannhauser Gate",
    "city" : "Caprica",
    "state" : "CC",
    "zipcode" : 512
  },
}

Решение #2:

{
  _id : ObjectId("4dcd2abe5981aec801010000"),
  title : "The only perfect site is hind-site",
  content : "Loren ipsum dolor sit amet…",
  saved_at : ISODate('2011-05-16T18:42:57.949Z'),
  author_id : ObjectId("4dd491695072aefc456c9aca")
}

Так как же поступить?
Этот вопрос всегда возникает, при проектировании способа хранения данных. в nosql решениях.

Решение #1:
Плюсы: данные о авторе доступны в основном документе публикации, что экономит на количестве запросов в базу.
Минусы: Если документы существенно велики, и используется не курсор, а массив, для работы с данными. Можно допустить перерасход памяти.

решение #2:
Плюсы: лёгкие документы
Минусы: дополнительная коллекция, документы которой можно извлечь дополнительным запросом.

Правило:
Если документ коллекции содержит в себе вложенный документ, как часть его, и, вложенный документ не требуется как самостоятельный документ — его следует включить, согласно решению #1. Чаще всего это характеризуется связью 1-1 (Один к одному).
Если вложенный документ является самостоятельным и является вложенным в другие документы (например категория), его следует вынести в отдельную коллекцию. Связь между документами будет 1-∞(один ко многим) или ∞-∞(много ко многим).

Оставить комментарий

© 2010 - 2024 Ядоблог. Ничего не защищено.
Powered by Лаборатория Яда. Написать Яду