MondoDB - Зачем вам вставлять документ в документ? - PullRequest
1 голос
/ 26 декабря 2011

Я собираюсь использовать MongoDB для реализации своей базы данных.Почему вы хотите встроить документ в документ?

Ответы [ 2 ]

4 голосов
/ 26 декабря 2011

Это один из способов сделать то, что в реляционной базе данных вы бы сделали с JOIN (то, что вы не можете сделать в MongoDB).

Например, вы можете иметь документ MongoDB в качестве поста в блоге и встраивать список комментариев прямо туда.

Тогда вы можете (например):

  • загрузка сообщений и комментариев в одном запросе
  • поиск сообщений, на которые есть ответы
  • поиск сообщений пользователя A, у которых есть ответы пользователя B
  • атомное обновление как поста, так и комментариев в одной транзакции

Все это было бы невозможно (или, по крайней мере, трудно), если бы комментарии хранились в их собственной коллекции как отдельные документы.

2 голосов
/ 26 декабря 2011

Проще говоря, вставьте, если это НЕ объект верхнего уровня, если он НЕ имеет сложных отношений, если будет много дублирующих данных, если вы НЕ встраиваете, и если ваши документы станут больше, чем несколько мегабайт.

Взято с сайта MongoDB: http://www.mongodb.org/display/DOCS/Schema+Design

Сводка лучших практик

  • Встраивание объектов "первого класса", которые находятся на верхнем уровне, обычно имеют своисобственная коллекция.
  • Объекты сведений о позициях, как правило, внедряются.
  • Объекты, которые следуют за отношением "содержит" моделирование объекта, как правило, должны быть встроены.
  • Как правило, отношения многие ко многимсделано путем связывания.
  • Коллекции с несколькими объектами могут безопасно существовать как отдельные коллекции, поскольку вся коллекция быстро кэшируется в памяти сервера приложений.
  • Встроенные объекты связать немного сложнеечем объекты верхнего уровня в коллекциях.
  • Труднее получить представление системного уровня для встроенных объектов.Когда необходимо, операция такого рода выполняется с помощью средства отображения / уменьшения MongoDB.
  • Если объем данных для встраивания огромен (много мегабайт), вы можете достичь предела размера одного объекта.См. Также GridFS.
  • Если производительность является проблемой, вставьте.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...