Loading…

Mongodb: um banco de dados NoSQL

Vamos falar um pouco sobre o Mongodb que é um banco de dados NoSQL que não utiliza modelagem relacional, o que é para muitos uma novidade assustadora, pois estamos acostumados a utilizar o modelo relacional. Os modelos relacionais utilizam uma abordagem bidimensional que representa quantas dimensões quisermos a partir de relacionamentos com linhas e colunas. Entretanto, para consultas com grandes quantidades de dados podemos encontrar problemas de performance especialmente quando precisamos distribuir os dados em vários computadores. O Mongodb não utiliza este conceito e oferece uma alta performance em armazenamento de grandes quantidades de dados e rapidez nas consultas. Nesse post vamos falar sobre agregação(embeded), associação(reference), ids automáticos e Schemas. Os registros são documentos Fazendo uma comparação com banco de dados que utilizam modelagem relacional para persistirmos dados no banco precisamos criar uma base de dados antes, entretanto no Mongodb não precisamos criá-la pois isso é feito automaticamente. Abaixo segue dois exemplos do modelo relacional e o utilizado pelo Mongodb: SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
create table tb_uf(
 uf_id bigint not null primary key,
 uf_sigla character varying (2) not null,
 uf_nome character varying (200) not null
)
create table tb_cidade(
 cid_id bigint not null primary key,
 cid_nome character varying (200) not null,
 cid_id_uf_uf bigint not null references tb_uf
)
create table tb_academico(
 aca_id bigint not null primary key,
 aca_rga character varying (20) not null,
 aca_nome character varying (200) not null,
 aca_telefone character varying (20),
 aca_celular character varying (20),
 aca_email character varying (200),
 aca_sexo char,
 aca_id_curso bigint not null references tb_curso(cur_id),
 aca_id_cid bigint references tb_cidade (cid_id)
)

JSON

joao = {
_id: 1,
rga: 2013254154,
telefone: 5531547848,
email: “academico@exemplo.com.br”,
nome: “Henrique Lobo Weissmann”,
naturalidade:{cidade:”Porto Alegre”, estado:”Rio Grande do Sul”, pais: “Brasil”}
}
db.academico.save(joao)

Associações (References) no Mongodb

Fazendo uma analogia com SQL podemos dizer que no Mongodb a associação é como se fosse uma foreign key do modelo relacional. Podemos incluir referências e vincular um documento ao outro. Exemplo:

original_id = ObjectId()
historia ={
_id = original_id,
curso: “História”,
intituicao: “UFMS”
}
db.curso.save(historia)
joao = {
_id: 1,
rga: 2013254154,
telefone: 5531547848,
email: “joao@exemplo.com.br”,
nome: “Joao Lobo Weissmann”,
naturalidade:{cidade:”Porto Alegre”, estado:”Rio Grande do Sul”, pais: “Brasil”},
curso_id: original_id
}
db.academico.save(joao)

Agregação (Embeded) no Mongodb

Podemos incorporar sub-documentos a um documento, como assim? Vamos utilizar o exemplo anterior, realizamos uma associação e vinculamos o documento acadêmico com o documento curso inserindo o campo curso_id. Se fossemos realizar uma consulta o banco acessaria os dois documentos, porém, poderíamos incorporar o curso diretamente no documento acadêmico o que permitiria ao banco realizar apenas uma operação de consulta. Exemplo:

{
joao = {
_id:7,
rga: 2013254154,
telefone: 5531547848,
email: “joao@exemplo.com.br”,
nome: “Joao Lobo Weissmann”,
naturalidade:{cidade:”Porto Alegre”, estado:”Rio Grande do Sul”, pais: “Brasil”},
cursoInstituicao:{curso: “História”, instituicao: “UFMS”}
}
db.academico.save(felipe)

Id’s automáticos(ObjectId) No mongo os documentos são identificados através de um campo id que atua como uma chave primária. Cada documento possui seu id que possivelmente será único. Se o programador não informar o id do documento por padrão o mongoDB irá adicionar um campo id automaticamente que conterá um ObjectId. Exemplo: Vamos criar um documento que e salvá-lo. Repare que não identificamos um id para o documento acadêmico:

joao = {
rga: 2013254154,
telefone: 5531547848,
email: “academico@exemplo.com.br”,
nome: “Henrique Lobo Weissmann”,
naturalidade:{cidade:”Porto Alegre”, estado:”Rio Grande do Sul”, pais: “Brasil”}
}

Agora vamos pesquisar esse mesmo documento através do comando “db.academico.find();”. Deve aparecer uma resposta similar à seguinte (o atributo _id é um identificador exclusivo e provavelmente será diferente no seu resultado):

“_id”: ObjectId(“4cfa43ff528bad4e29beec57”),
“rga”: 2013254154,
“telefone”: 5531547848,
“email”: “academico@exemplo.com.br”,
“nome”: “Joao Lobo Weissmann”,
“naturalidade”:{“cidade”:”Porto Alegre”, “estado”:”Rio Grande do Sul”, “pais”: “Brasil”}
}

Schemas

Nos bancos de dados que utilizam modelagem relacional é necessário realizar um esquema de tabelas e atributos que farão parte de uma estrutura de dados fixa, ou seja, se durante um projeto precisarmos inserir um novo atributo em uma tabela do banco de dados seremos obrigados a acrescentá-lo na tabela incluindo uma coluna com campos vazios. O Mongodb não exige uma estrutura fixa, assim, podemos atualizar apenas um documento, com a adição de novos campos, por exemplo, sem causar problemas na estrutura do banco de dados. Binary JSON Permite representação de algumas formas de dados que não fazem parte do padrão JSON(Date, BinData, outros). Através do comando instanceof retornará um boolean para testar se um valor é uma instância de algum tipo: acadêmico.id instanceof ObjectId Resultado: true. Através do comando typeof podemos saber qual é o tipo do atributo. typeof acadêmico.id

Ficamos por aqui pessoal, deixe seu comentário e sugestões para os próximos artigos. Curta e compartilhe este artigo em suas redes sociais e até a próxima.

Autor: Cleiton Gonçalves