Я читал, что внедрение лучше с точки зрения производительности: "Если производительность - это проблема, вставьте". (http://www.mongodb.org/display/DOCS/Schema+Design), и большинство руководств всегда говорят, что вложения должны быть встроены.
Однако я не уверен, что это так. Предположим, у нас есть два объекта: "Блог и почта". Блог содержит сообщения.
Теперь создание всех сообщений, встроенных в блог, будет иметь следующие проблемы:
- Paging. Поскольку невозможно фильтровать внедренные объекты, мы всегда будем получать все сообщения и должны их отфильтровывать в приложении.
- Фильтрация. То же, что и раньше, при поиске слов внутри сообщений невозможно будет фильтровать встроенную коллекцию из MongoDB.
- Вставить. Я предполагаю, что вставка в коллекцию происходит быстрее, чем вставка в внедренный объект. Это верно? это написано где угодно?
- Обновление. То же, что и раньше, встроенное поле для обновления внутри меньшего документа (Post) может быть быстрее, чем встроенное обновление сообщения внутри большого документа блога. Правильно ли это?
Принимая все вышеизложенное, я бы пошел за публикациями в отдельной коллекции, ссылающейся на блог. Это правильный вывод?
(Примечание. Пожалуйста, не учитывайте ограничение размера документа в ответе, пусть каждый блог будет иметь не более 1000 сообщений)