Você está na página 1de 18

BANCO DE DADOS

NÃO RELACIONAL

Luiz Fernando Calaça Silva


Bancos de dados
orientados a documentos
(document stores)
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Definir as características e funcionalidades dos bancos de dados


orientados a documentos.
„„ Descrever como armazenar e consultar dados como documentos
do tipo JSON.
„„ Ilustrar a aplicabilidade de bancos de dados orientados a documentos.

Introdução
A coleta dos dados é tão importante quanto a sua forma de armazena-
mento. Assim, ao longo do tempo, a humanidade buscou organizar seus
dados em ambientes seguros e de fácil recuperação, sejam eles físicos ou
digitais. É de extrema importância que o armazenamento seja feito de
forma correta, a fim de que seja possível recuperar a informação, quando
necessário. Logo, surgiram diversas formas de bancos de dados, como
a orientação a documentos e a sintaxe JSON para a representação da
informação, conceitos que podem ser aplicados em diversos segmentos.
Neste capítulo, você conhecerá as características e funcionalidades
dos bancos de dados orientados a documentos. Além disso, verá como
funciona o armazenamento e a consulta dos dados como documento do
tipo JSON. Por fim, verá exemplos de aplicabilidade de bancos de dados
orientados a documentos.
2 Bancos de dados orientados a documentos (document stores)

1 Características e funcionalidades
Segundo Harrison (2015), um banco de dados orientado a documentos trabalha
com dados não relacionais e os armazena como documentos estruturados,
geralmente nos formatos XML (eXtensible Markup Language; ou Linguagem
de Marcação Extensível, em português) ou JSON (JavaScript Object Notation;
ou Notação de Objetos JavaScript, em português). Contudo, isso não implica
nada específico, além do modelo de armazenamento de documentos. Os ban-
cos de dados orientados a documentos podem implementar transações ACID
(atomicidade, consistência, isolamento e durabilidade) ou outras características
de um RDBMS (Relational Database Management System; ou Sistema de
Gerenciamento de Bancos de Dados Relacionais, em português) tradicional,
embora os bancos de dados orientados a documentos dominantes forneçam
um suporte transacional relativamente modesto.
Os dados são estruturados de forma encadeada, podendo conter atributos
das coleções, tags e metadados, e seguem uma hierarquia de informações.
Além disso, é permitido que tenham redundância e inconsistência, conforme
o contexto NoSQL (não relacional) em que estão inseridos. Existem identi-
ficadores únicos universais (UUID, universally unique identifier) para cada
documento, com armazenamento chave-valor, que define como os dados
devem ser apresentados e, ainda, qual é o significado dos dados armazenados
na sua estrutura.
No entanto, nos bancos de dados orientados a documentos, não existe
necessariamente um esquema, como no banco de dados relacional, de modo
que não é necessário ter as estruturas das tabelas definidas para a inserção
de dados e não há um relacionamento entre as diversas entidades, sendo esta
uma característica de flexibilidade desse tipo de banco. Assim, se for preciso
criar um campo dentro do banco de dados, não é preciso mudar a estrutura ou
imaginar que haverá algum impedimento de chave primária ou estrangeria,
como no ambiente relacional, de modo que se torna fácil inserir um novo
campo. Além disso, os desenvolvedores permanecem livres para modificar o
modelo de dados à medida que os requisitos mudam dentro de um aplicativo,
e os consumidores podem interrogar os dados para determinar seu significado.
Bancos de dados orientados a documentos (document stores) 3

Outra característica importante dos bancos de dados orientados a docu-


mentos é que eles comumente têm projeções para uma arquitetura distribuída
(Figura 1), com foco na escalabilidade horizontal, em que há um master
(principal) e slaves (secundários). Além disso, há o conceito da desnormali-
zação, que indica que não haverá relacionamentos fixos de chaves primárias
e estrangeiras oriundos do ambiente relacional, bem como não será utilizada
a linguagem de consulta SQL (relacional).
Algumas das vantagens do uso de bancos de dados orientados a documentos
são: ganho de flexibilidade, disponibilidade e linguagem de consulta simples e
performática. Como desvantagem, em alguns casos, há a perda da consistência.
O MongoDB é um exemplo de banco de dados orientado a documentos, o qual
possui código aberto, alto desempenho e é escrito em linguagem C++, além
de não possuir esquemas, como em um contexto relacional. Além disso, ele é
multiplataforma, sendo formado por um conjunto de aplicações que utilizam
a sintaxe JSON. O MongoDB possui controle de versão para restaurar versões
antigas. As coleções (collections) presentes nos bancos de dados orientados
a documentos são como as tabelas do banco de dados tradicional comum.

Master

Slave Slave Slave

Figura 1. Arquitetura distribuída do contexto de bancos orien-


tados a documentos: diversos computadores slaves armazenam
os dados, sendo geridos por um master.
Fonte: Adaptada de Master... (2020).
4 Bancos de dados orientados a documentos (document stores)

Segundo Harrison (2015), um documento corresponde a uma linha no


banco de dados relacional, no entanto, como há o formato JSON na orientação
a documentos, há possibilidades diversas. Uma delas é a possibilidade de haver
um registro para referenciar um vetor que contém outros dados, representando
uma entidade e seus diversos detalhes.
Conforme Copeland (2013), a redundância ocorrida dentro dos bancos
de dados orientados a documentos é uma vantagem para a velocidade e a
otimização de uma consulta, já que não será preciso a utilização de diversas
junções. O Quadro 1, a seguir, apresenta uma comparação entre os bancos de
dados orientados a documentos e os bancos de dados relacionais.

Quadro 1. Comparação entre um banco de dados orientado a documentos e um banco


de dados relacional

Banco de dados orientado


Banco de dados relacional
a documentos

Baseado em documentos Tabelas com metadados internos,


autocontidos, os quais contêm todas de acordo com cada gerenciador de
as informações necessárias. banco de dados.

Não há necessidade de um esquema Baseado em ligações de chaves


fixo. primária e estrangeira.

Criação de um novo campo dentro do A inserção de novos campos precisará


banco de dados sem que isso afete respeitar as chaves primárias e
outros registros. estrangeiras.

Os dados podem ser repetidos em Entrada única para cada registro,


diversos documentos. já que possuiu uma chave primária
rígida.

Possuiu um UUID. Possuiu uma chave primária simples


ou composta.

Não suporta as junções, porém Suporta junções através das chaves


permite realizar visualizações de união primárias e estrangeiras.
de documentos.

Os documentos não precisam Ainda que um campo não receba


armazenar campos vazios. nenhum valor, ele será criado.
Bancos de dados orientados a documentos (document stores) 5

2 Armazenamento e consulta de dados


como documentos do tipo JSON
Os bancos de dados baseados em documentos JSON e os bancos de dados XML
compartilham muitas semelhanças, porém cada um deles foi projetado para
prover casos de uso. Em geral, os bancos de dados XML são utilizados como
sistemas de gerenciamento de conteúdo para organizar e manter coleções de
arquivos de texto no formato XML, como trabalhos acadêmicos, documentos
comerciais, entre outros. Em contrapartida, os bancos de dados orientados
a documentos JSON suportam principalmente aplicações baseadas na web,
armazenando e modificando o conteúdo dinâmico em páginas e aplicações
com dados transacionais.
Segundo Harrison (2015), o JSON foi criado por Douglas Crockford, pio-
neiro do JavaScript, como parte de uma tentativa de criar uma estrutura para
aplicativos da web mais dinâmicos e interativos. O JSON foi deliberadamente
concebido como um substituto mais leve para o XML, tornando-se uma alter-
nativa significativa ao XML no modelo de programação AJAX (Asynchronous
Javascript and XML; ou JavaScript Assíncrono e XML, em português), que
impulsionou uma revolução nos aplicativos da web em meados dos anos 2000.
A Figura 2, a seguir, apresenta uma comparação entre um arquivo JSON e
um arquivo XML.
6 Bancos de dados orientados a documentos (document stores)

Figura 2. Comparação entre (a) um arquivo JSON e (b) um arquivo XML, ambos com formato
orientado a documentos.
Fonte: Harrison (2015, p. 58).

Segundo Crockford (2006), o modelo de dados JSON consiste em quatro


tipos primitivos (Quadro 2) e dois tipos estruturados (Quadro 3).

Quadro 2. Quatro tipos primitivos do modelo de dados JSON

String unicode Caracteres envolvidos em aspas

Números Pontos flutuantes de precisão dupla.

Nulo Vazio.

Valores booleanos Verdadeiro ou falso.

Fonte: Adaptado de Crockford (2006).


Bancos de dados orientados a documentos (document stores) 7

Quadro 3. Dois tipos estruturados do modelo de dados JSON

São coleções de atributos, em que cada atributo é um par de


Objetos
chaves (string) e valor (qualquer tipo).

São listas ordenadas de valores, os quais podem ter diversos


Arrays
tipos dentro da mesma estrutura.

Fonte: Adaptado de Crockford (2006).

MongoDB: um banco de dados orientado


a documentos baseado em JSON
Segundo Özsu e Valduriez (2020), o MongoDB armazena os documentos
utilizando o BSON (um binário do JSON) e tem os identificadores univer-
sais gerados pelo próprio banco dentro do elemento ObjectID. Dentro do
MongoDB, há uma variável db, na qual é possível referenciar o banco que
será utilizado.
A consulta dos documentos é realizada por meio do método de agrupamento
e filtragem: o MapReduce. O embedding e o linking no MongoDB são seme-
lhantes ao join da consulta SQL. O MongoDB permite acrescentar dados
por meio de um update ou pela função upserts, que atualiza o documento,
caso exista, ou insere um novo.
Confira, a seguir, alguns exemplos comparativos entre o SQL comum e
o contexto orientado a documentos.

Criação de um esquema em um banco de dados relacional e dentro do


MongoDB, respectivamente:

CREATE TABLE users (


id MEDIUMINT NOT NULL AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)
8 Bancos de dados orientados a documentos (document stores)

db.users.insert( { user_id: "abc123", age: 55, status: "A" } )


db.createColleation("users")

Exclusão de um registro em um banco de dados relacional e dentro do


MongoDB, respectivamente:

DELETE FROM users WHERE status = "D"


DELETE FROM users
db.users.remove( { status: "D" } )
db.users.remove( )

Atualização de um registro em um banco de dados relacional e dentro do


MongoDB, respectivamente:

UPDATE users SET status = "C" WHERE age > 25


UPDATE users SET age = age + 3 WHERE status = “A”
db.users.update( { age: { $gt: 25 } },{ $set: {status: "c"}
} , {multi: true} )
db.users.update( {status: "A" }, { $inc: {age: 3} } , { multi:
true } )

Inserção de um registro em um banco de dados relacional e dentro do


MongoDB, respectivamente:

INSERT INTO users (user_id, age, status)


VALUES ("bcd001", 45, "A")
db.users.insert( user id: "bcd001", age: 45, status: "A")

Seleção de um registro em um banco de dados relacional e dentro do


MongoDB, respectivamente:

SELECT * FROM users WHERE age > 25 AND age <= 50


SELECT * FROM users WHERE user_id like "bc%"
db.users.find( age: { $qt: 25, $lte: 50 ) )
db.users.find( {user_id: /^bc/} )
Bancos de dados orientados a documentos (document stores) 9

Seleção com ordenação Sort por meio do campo user_id em um banco


de dados relacional e dentro do MongoDB, respectivamente:

SELECT * FROM users WHERE status = "A" ORDER BY user_id ASC


SELECT * FROM users WHERE status = "A" ORDER BY user_id DESC
db.users.find( {status: "A" } ).sort( { user id: 1 } )
db.users.find( {status: "A" } ).sort( { user id: -1 } )

CouchDB: um banco de dados orientado a documentos


baseado em JSON
O CouchDB é um banco de dados orientado a documentos, cuja interface gráfica
traz facilidades para a criação de um novo banco e seus documentos (Figura 3).
Criado por Damien Katz, o CouchDB foi o primeiro sistema de banco de
dados baseado em JSON notável (HARRISON, 2015). Damien Katz havia
trabalhado no Lotus Notes, um sistema de colaboração com fortes recursos
de manipulação de documentos. Em 2005, ele decidiu criar um sistema de
banco de dados mais estreitamente alinhado ao desenvolvimento da web e
aos modelos de programação orientada a objetos. O resultado foi o CouchDB.
Inicialmente, o CouchDB foi programado em C++ e armazenou documentos
XML. Contudo, por volta de 2007, surgiu uma nova arquitetura, que incorporou
o JSON como formato de armazenamento.

Figura 3. Tela inicial do CouchDB com um banco-teste criado a partir da opção Create
Database.
10 Bancos de dados orientados a documentos (document stores)

Ao clicar para criar um banco de dados no CouchDB, é possível adicionar


documentos em formato JSON clicando em Create Document. Para a consulta
dentro do CouchDB, é possível utilizar o Mango Query (Figura 4), que realizará
a seleção dos dados que forem necessários.

Figura 4. Consulta com o Mango Query dentro do CouchDB.

3 Aplicabilidades dos bancos de dados


orientados a documentos
É possível aplicar os bancos de dados orientados a documentos em diversos
contextos. Um exemplo seria no contexto das plataformas de vídeo, em que
um documento terá a informação completa de cada vídeo. Empresas como a
Globo.com usam o MongoDB para o aplicativo do Cartola FC, e as empresas
SourceForge e Foursquare também o utilizam em seus contextos.
Para o gerenciamento de conteúdo, um banco de dados orientado a docu-
mentos é uma abordagem possível, como blogs, CMS e plataformas de vídeo.
A estratégia de modelagem de dados orientada a documentos se refere ao fato
de que cada entidade que o aplicativo rastrear pode ser armazenada como um
documento único. Um desenvolvedor de software consegue atualizar facilmente
os dados de um aplicativo de maneira mais intuitiva no banco de dados orien-
tado a documentos. Além disso, se o modelo de dados precisar mudar, somente
Bancos de dados orientados a documentos (document stores) 11

os documentos afetados precisarão ser atualizados. Nenhuma reorganização


de esquemas é necessária, bem como nenhum tempo de inatividade de banco
de dados é necessário para fazer as alterações, o que demonstra o contexto da
alta disponibilidade do banco de dados orientado a documentos.
Para a abordagem de catálogos, os bancos de dados orientados a documen-
tos são eficientes e eficazes. Em um aplicativo de comércio eletrônico, por
exemplo, diferentes itens costumam ter números de atributos distintos. Assim,
gerenciar milhares de atributos em bancos de dados relacionais é ineficiente
e afeta a performance de leitura. Contudo, ao utilizar um banco de dados
orientado a documentos, os atributos de cada produto podem ser descritos em
um único documento para processamento eficiente e uma maior velocidade de
leitura daquele dado, além do fato de que alterar os atributos de um produto
não afetará os outros. Além disso, é possível aplicá-lo na reorganização de
uma base de dados, realizando uma conversão da forma armazenada para o
modelo orientado a documentos.
Assim como no contexto relacional, pode-se ter relacionamentos entre os
documentos, realizando “linkagem” entre eles, conforme a Figura 5.

Figura 5. “Linkagem” entre documentos no formato JSON. Um registro está referenciando


N outros, mostrando a aplicação do relacionamento 1 para N dentro dos bancos de dados
orientados a documentos.
Fonte: Harrison (2015, p. 60).

Enquanto nos bancos relacionais haveria diversas tabelas para descrever


um objeto, na orientação a documentos, há uma centralização de informação
autodescritiva. Por exemplo, ao criar uma representação de dentro de um
e-commerce de um álbum musical que contém as informações de entrega,
preço, detalhes específicos e suas faixas, tem-se a representação a seguir:
12 Bancos de dados orientados a documentos (document stores)

{
   "id":"00e8da9b",
   "tipo":"Audio Album",
   "título":"A Love Supreme",
   "description":"by John Coltrane",
   "código":"B0000A118M",
   "entrega":{
      "peso":6,
      "dimensões":{
         "largura":10,
         "algura":10,
         "profundidade":1
      
}

},
   "preco":{
      "lista":1200,
      "faixas_adicionais":1100,
      "download":100,
      "pacote":8
},
   "detalhes":{
      "título":"A Love Supreme [Original Recording Reissued]",
      "artista":"John Coltrane",
      "genero":[
         "Jazz",
         "General"
      
],
faixas":[
         "A Love Supreme, Part I: Acknowledgement",
         "A Love Supreme, Part II: Resolution",
         "A Love Supreme, Part III: Pursuance",
         "A Love Supreme, Part IV: Psalm"
      
]
}
}
Bancos de dados orientados a documentos (document stores) 13

Se fosse no contexto relacional, haveria a criação de diversas tabelas, e a


consulta teria um processamento maior. Assim, pode-se observar de forma
prática as vantagens do modelo orientado a documentos.
Contudo, apesar desse exemplo, Bell (2018) aponta que se deve evitar
documentos grandes, pois, embora armazenar todos os dados em um único
documento seja, de fato, um dos objetivos do design sem esquema (NoSQL),
isso deve ser utilizado com discernimento técnico e de performance. Se o
documento for muito grande, pode-se encontrar problemas de desempenho
tentando recuperar mais de um único documento, por exemplo, para uma lista
ou para executar uma operação sobre um conjunto grande de documentos.
Portanto, deve-se considerar quais partes do documento são utilizadas e
quando. Uma alternativa para isso é dividir o documento em vários documentos
menores (cada um com própria coleção), pois, dessa forma, é possível otimizar
a recuperação para a maioria de operações, que recuperam os dados mais
utilizados e os menos utilizados em coleções próprias.

Os bancos de dados orientados a documentos mais utilizados podem ser encontrados


na página “DB-Engines Ranking of Document Stores”, do portal DB-Engines.

Os bancos de dados orientados a documentos se diferenciam de outros


sistemas relacionais por meio da adoção de um formato de documento: XML
ou JSON. Os bancos que suportam os formatos de documentos XML são
importantes sobretudo como sistemas de gerenciamento de conteúdo, pois
fornecem um repositório de gerenciamento para arquivos de texto baseados
em XML. Já os bancos de dados orientados a documentos JSON utilizam
documentos JSON como camada de dados para aplicativos baseados na web.
Até certo ponto, os bancos de dados orientados a documentos baseados em
XML representam uma geração anterior de bancos de dados, ao passo que
os bancos de dados orientados a documentos JSON podem ser a próxima
geração (HARRISON, 2015). Portanto, em um futuro próximo, o suporte a
JSON pode ser um recurso comum a todos os bancos de dados, em vez de um
diferencial entre as tecnologias.
14 Bancos de dados orientados a documentos (document stores)

BELL, C. Introducing the MySQL 8 document store. New York: Apress, 2018. 532 p.
COPELAND, R. MongoDB applied design patterns: practical use cases with the leading
NoSQL database. Sebastopol: O’Reilly, 2013. 176 p.
CROCKFORD, D. RFC4627: the application/json Media Type for JavaScript Object
Notation (JSON). Wilmington: Internet Engineering Task Force, July 2006. Disponível
em: https://tools.ietf.org/html/rfc4627. Acesso em: 16 jun. 2020.
HARRISON, G. Next generation databases: NoSQL, NewSQL, and big data. New York:
Apress, 2015. 235 p.
MASTER-Slave-Replication. PCSS.no, Sel, 2020. Disponível em: https://www.pcss.no/
pcss-fellesregister/master-slave-replication/. Acesso em: 16 jun. 2020.
ÖZSU, M. T.; VALDURIEZ, P. NoSQL, NewSQL, and Polystores. In: ÖZSU, M. T.; VALDURIEZ,
P. Principles of distributed database systems. 4. ed. Cham: Springer, 2020. p. 519–557.

Leituras recomendadas
ACHARYA, B. et al. NoSQL Database Classification: New Era of Databases for Big Data.
International Journal of Knowledge-Based Organizations, [S. l.], v. 9, n. 1, p. 50–65, 2019.
DB-ENGINES Ranking of Document Stores. solid IT, Vienna, 2020. Disponível em: https://
db-engines.com/en/ranking/document+store. Acesso em: 16 jun. 2020.
GUNAWAN, R.; RAHMATULLOH, A.; DARMAWAN, I. Performance Evaluation of Query
Response Time in The Document Stored NoSQL Database. In: INTERNATIONAL CON-
FERENCE ON QUALITY IN RESEARCH (QIR), 16., 2019, Padang. Proceedings […]. Padang:
Padang Conventional Center, 2019. p. 1–6.
MICHEL, F.; ZUCKER, C. F.; MONTAGNAT, J. Bridging the Semantic Web and NoSQL Worlds:
Generic SPARQL Query Translation and Application to MongoDB. In: HAMEURLAIN, A.
et al. (ed.). Transactions on Large-Scale Data-and Knowledge-Centered Systems XL, Berlin:
Springer, 2019. p. 125–165. Disponível em: https://hal.archives-ouvertes.fr/hal-01926379.
Acesso em: 16 jun. 2020.
Bancos de dados orientados a documentos (document stores) 15

Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.

Você também pode gostar