MongoDB дизайн - теги - PullRequest
       7

MongoDB дизайн - теги

5 голосов
/ 20 мая 2011

Я новичок в MongoDB. У меня есть вопрос дизайна, о производительности MongoDB. Допустим, у меня есть класс Movies с двумя свойствами: Name и Director. Также я хочу отметить этот класс фильма. Лучше добавить новое свойство строк [] к этому классу или создать новый класс MovieTags? Я знаю, что буду часто запрашивать эти теги, потому что я буду использовать автозаполнение в пользовательском интерфейсе. Для этой функции автозаполнения мне нужны только теги, а не объект Movie . Какой вариант лучше? добавить свойство строк [] или ссылку на коллекцию MovieTags? Думая о производительности ... конечно, в обоих случаях индексация будет выполнена.

Должен ли я использовать MapReduce? Чтобы выбрать только теги, для функции автозаполнения, если я использую объект embebed string []? Как?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 мая 2011

Я бы, вероятно, пошел с такой схемой, которая хранит теги в поле строкового массива:

db.movies.insert({
    name: "The Godfather",
    director: "Francis Ford Coppola",
    tags: [ "mafia", "wedding", "violence" ]
})

db.movies.insert({
    name: "Pulp Fiction",
    director: "Quentin Tarantino",
    tags: [ "briefcase", "violence", "gangster" ]
})

db.movies.insert({
    name: "Inception",
    director: "Christopher Nolan",
    tags: [ "dream", "thief", "subconscious" ]
})

Для этого типа запроса вам не нужно уменьшать карту. Внедрив теги в документ фильма, вы можете воспользоваться функцией multikey MongoDB и находить фильмы с заданным тегом, используя один запрос find () , например:

db.movies.find( { tags: "dream" } )

И, как вы сказали, также стоит добавить индекс в массив с несколькими ключами для повышения производительности запросов:

db.movies.ensureIndex( { tags: 1 } )
2 голосов
/ 23 мая 2011

Вы всегда можете отфильтровать поля, которые возвращаются как часть результата запроса.

Ссылка на документы, где подробно описано, как это сделать http://docs.mongodb.org/manual/tutorial/query-documents/#Querying-FieldSelection

Это позволит вам отфильтровать части объекта фильма, которые вам не интересны.

...