MongoDB: поиск по вложенному ключу против ключа верхнего уровня - PullRequest
4 голосов
/ 02 ноября 2011

Вариант 1:

{
  _id: ObjectId,
  text: String,
  author: {
    id: ObjectId,
    name: String,
    email: String
  }
}

Вариант 2:

{
  _id: ObjectId,
  text: String,
  authorId: Id,
  author: {
    name: String,
    email: String
  }
}

У меня есть схема для почтовых документов, аналогичная варианту 1выше.Существует отдельная коллекция 'Author', на которую ссылаются поля идентификатора автора выше.«Имя» и «электронная почта» были дублированы здесь;в коллекции авторов больше информации об авторах.

Один из моих запросов в коллекции сообщений будет запрашивать все сообщения по определенному идентификатору автора.

С точки зрения производительности, лучше ли?перейти к варианту 2, поскольку ключ идентификатора автора находится на «верхнем уровне» документа?Есть ли разница, если вы ищете документы по вложенному ключу, как в варианте 1?

1 Ответ

4 голосов
/ 02 ноября 2011

Нет, это не повлияет на производительность.MongoDb может очень хорошо индексировать ключ «верхнего уровня» или «вложенный ключ».MongoDb может внутренне считывать полный объект BSON, следовательно, эффективно достигать любой его части.Читайте здесь: http://www.mongodb.org/display/DOCS/BSON

Вы можете попробовать создать 2 набора тестов и создать индексы для запрашиваемых полей.Производительность будет такой же.

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