2013-06-04 2 views
2

Я довольно новичок в MongoDB и движении NoSQL, так голый со мной. До сих пор я сталкивался тремя различными способами из «присоединения» коллекции:MongoDB - DBRefs vs Map/Reduce vs Ссылки на Руководство пользователя

  1. вручную держать «внешний ключ-ESK» ссылка на коллекцию вы хотите присоединиться к вашей целевой коллекции
  2. Использование DBRefs
  3. Написать ряд Map/Reduce функций для поддержания отношений

Может кто-то объяснить преимущества и когда я должен каждый из них?

Мое первое впечатление о том, что Map/Reduce используется для больших, часто используемых наборов, а два других предназначены в основном для небольших/быстрых запросов.

+2

Я бы сказал, что вы никогда не должны поддерживать соединение через MR, а DBRef - это еще одна версия первого, нет никакой разницы, кроме того, что DBRef также содержит имя коллекции – Sammaye

+0

Интересно. Вы знаете способ оптимизации ссылок, поэтому вам не нужно будет делать дополнительный запрос от клиента для извлечения ссылочной записи? Есть ли способ сделать это на сервере до возвращения набора данных? – Adam

+0

Нет, mongodb не имеет разрешения на серверную ссылку – Sammaye

ответ

1

Извините за поздний ответ - вот простой пример встроенного документа, написанного на мангуста:

var postSchema = new Schema({ 
    author : {type : String}, 
    title : {type : String, require : true}, 
    content : {type : String, require : true}, 
    comment : { 
    owner : {type : String}, 
    subject : {type: String, require}, 
    content : {type String, require} 
    } 
}); 

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

+0

Спасибо. У меня была вторая схема для комментариев, чтобы я мог ссылаться на них либо владельцем, либо по почте (чтобы заимствовать структуру именования в вашем примере). Это, по-видимому, наилучшим образом подходит для моих конкретных случаев использования, хотя я вижу, что с MongoDB и базами данных на основе документов вам нужно ориентировать свое мышление немного по-другому. – Adam

+0

Я согласен, потребуется некоторое время, чтобы переключиться с РСУБД на базы данных на основе документов. –