Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Construindo com padrões: o padrão Attribute

Ken W. Alger, Daniel Coupal3 min read • Published Jan 11, 2022 • Updated Jan 23, 2023
MongoDBEsquema
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Bem-vindode volta à série Construindo com padrões. Da última vez, analisamos o padrãoPolymorphicPattern, que abrange situações em que todos os documentos de uma collection têm estrutura semelhante, mas não idêntica. Nesta postagem, daremos uma olhada no Padrão de Atributo.
O Padrão de Atributo é particularmente adequado quando:
  • Temos documentos grandes com muitos campos semelhantes, mas há um subconjunto de campos que compartilham características comuns e queremos classificar ou consultar esse subconjunto de campos, ou
  • Os campos que precisamos classificar são encontrados apenas em um pequeno subconjunto de documentos, ou
  • Ambas as condições acima são atendidas nos documentos.
Por motivos de desempenho, para otimizar nossa pesquisa, provavelmente precisaremos de muitos índices para contabilizar todos os subconjuntos. A criação de todos esses índices pode reduzir o desempenho. O Attribute Pattern fornece uma boa solução para esses casos.

O padrão de atributo

Vamos pensar em uma coleção de filmes. Os documentos provavelmente terão campos semelhantes envolvidos em todos os documentos: título, diretor, produtor, elenco, etc. Digamos que queiramos pesquisar a data de lançamento. Um desafio que enfrentamos ao fazer isso é: qual data de lançamento? Os filmes geralmente são lançados em datas diferentes em países diferentes.
1{
2 title: "Star Wars",
3 director: "George Lucas",
4 ...
5 release_US: ISODate("1977-05-20T01:00:00+01:00"),
6 release_France: ISODate("1977-10-19T01:00:00+01:00"),
7 release_Italy: ISODate("1977-10-20T01:00:00+01:00"),
8 release_UK: ISODate("1977-12-27T01:00:00+01:00"),
9 ...
10}
A busca por uma data de lançamento exigirá a análise de muitos campos ao mesmo tempo. Para fazer pesquisas rápidas por datas de lançamento, precisaríamos de vários índices em nossa coleção de filmes:
1{release_US: 1}
2{release_France: 1}
3{release_Italy: 1}
4...
Usando o Attribute Pattern, podemos mover esse subconjunto de informações para uma matriz e reduzir as necessidades de indexação. Transformamos essas informações em uma array de pares de valores-chave:
1{
2 title: "Star Wars",
3 director: "George Lucas",
4 ...
5 releases: [
6 {
7 location: "USA",
8 date: ISODate("1977-05-20T01:00:00+01:00")
9 },
10 {
11 location: "France",
12 date: ISODate("1977-10-19T01:00:00+01:00")
13 },
14 {
15 location: "Italy",
16 date: ISODate("1977-10-20T01:00:00+01:00")
17 },
18 {
19 location: "UK",
20 date: ISODate("1977-12-27T01:00:00+01:00")
21 },
22 ...
23 ],
24 ...
25}
A indexação se torna muito mais gerenciável com a criação de um índice nos elementos da matriz:
1{ "releases.location": 1, "releases.date": 1}
Usando o Attribute Pattern, podemos adicionar organização aos nossos documentos para características comuns e considerar campos raros/imprevisíveis. Por exemplo, um filme lançado em um evento novo ou pequeno. Além disso, a mudança para uma convenção de chave/valor permite o uso de nomes não determinísticos e a fácil adição de qualificadores. Por exemplo, se nossa coleta de dados fosse sobre garrafas de água, nossos atributos poderiam ser mais ou menos assim:
1"specs": [
2 { k: "volume", v: "500", u: "ml" },
3 { k: "volume", v: "12", u: "ounces" }
4]
Aqui, dividimos as informações em chaves e valores, "k" e "v," e adicionamos um terceiro campo, "u,", que permite que as unidades de medida sejam armazenadas separadamente.
1{"specs.k": 1, "specs.v": 1, "specs.u": 1}

Caso de uso de amostra

O Attribute Pattern é adequado para esquemas que têm conjuntos de campos com o mesmo tipo de valor, como listas de datas. Também funciona bem ao trabalhar com as características dos produtos. Alguns produtos, como roupas, podem ter tamanhos expressos em pequeno, médio ou grande. Outros produtos da mesma coleção podem ser expressos em volume. No entanto, outros podem ser expressos em dimensões físicas ou peso.
Um cliente no domínio do gerenciamento de ativos implantou recentemente sua solução usando o Attribute Pattern. O cliente usa o padrão para armazenar todas as características de um determinado ativo. Essas características raramente são comuns entre os ativos ou são simplesmente difíceis de prever no momento do design. Os modelos relacionais normalmente usam um processo de design complicado para expressar a mesma ideia na forma de campos definidos pelo usuário.
Embora muitos dos campos no catálogo de produtos sejam semelhantes, como nome, fornecedor, fabricante, país de origem etc., as especificações ou atributos do item podem ser diferentes. Se seus padrões de acesso a aplicativos e dados dependem da pesquisa em vários desses campos diferentes ao mesmo tempo, o Padrão de Atributo fornece uma boa estrutura para os dados.

Conclusão

O Padrão de Atributo facilita a indexação dos documentos, direcionando muitos campos semelhantes por documento. Ao mover esse subconjunto de dados para um subdocumento de valor-chave, podemos usar nomes de campo não determinísticos, adicionar qualificadores adicionais às informações e declarar com mais clareza a relação do campo e valor originais. Quando usamos o Attribute Pattern, precisamos de menos índices, nossas consultas se tornam mais simples de escrever e mais rápidas.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Início rápido

Introdução ao MongoDB e Helidon


Nov 12, 2024 | 6 min read
Tutorial

Encryption in Use: The Magic of MongoDB for Secure Queries


Dec 20, 2024 | 7 min read
Artigo

Lidando com Erros do MongoDB PHP


Aug 28, 2024 | 7 min read
Artigo

Documentos volumosos


Oct 01, 2024 | 6 min read
Sumário
  • O padrão de atributo