MongoDB: Должны ли вы по-прежнему предоставлять идентификаторы, связанные с другими коллекциями или просто включать коллекции? - PullRequest
5 голосов
/ 05 января 2011

Я довольно новичок в MongoDB и NoSQL в целом.У меня есть коллекция тем, где каждая тема может иметь много комментариев.Каждый комментарий будет содержать метаданные и все такое, что сделает коллекцию комментариев полезной.

В MySQL я использовал бы внешние ключи для связи с таблицей комментариев, но в NoSQL я должен просто включить коллекцию комментариев в коллекцию тем или это было бы в отдельной коллекции и связать по идентификаторам?

Спасибо!Matt

Ответы [ 2 ]

8 голосов
/ 05 января 2011

Это зависит.

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

Это зависит от отношений - у вас есть отношения один ко многим или многие ко многим? Если это один-ко-многим, а количество связанных сущностей невелико, вы можете включить их в документ IList. Если их много ко многим, вы можете использовать более традиционные отношения, или вы можете включить обе стороны в качестве ILists.

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

Другие советы:

С MongoDB вы можете индексировать массивы INTO в документах. Поэтому не думайте, что индекс - это просто индекс простого поля в документе (например, SQL). Вы можете использовать, скажем, коллекцию тегов в теме и индексировать теги. (См. http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)

При получении или записи данных вы можете выполнять частичное чтение и частичную запись любого документа. (см. http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields)

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

Это довольно существенное изменение мышления от реляционного мышления, но оно того стоит, если вам нужна масштабируемость и гибкость, которые дает подход NOSQL.

2 голосов
/ 05 января 2011

Также ознакомьтесь с документацией по разработке схем (http://www.mongodb.org/display/DOCS/Schema+Design).. Также есть несколько видео / слайдов с несколькими презентациями 10Gen по дизайну схем, связанных на сайте Mongo. Обзор см. http://www.mongodb.org/pages/viewpage.action?pageId=17137769.

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