Olá, pessoal, tudo bem? Me chamo Joyci, e sou uma Acelera de DBA NoSQL, isso é, banco de dados não relacional. Visitando o blog da Dataside, encontramos um artigo muito bom falando sobre a importância do banco de dados, e como este é um serviço fundamental para o funcionamento das empresas.
No artigo, é apresentado a estrutura de banco de dados relacional, em que os dados são armazenados em estruturas Pré definidas: nome, sobrenome, CPF, data de nascimento, etc. Agora, quando falamos de banco de dados não relacional, estamos apresentando uma forma diferente de armazenamento e performance dos dados.
O banco de dados não relacional busca principalmente atender às deficiências de escalabilidade, performance, e disponibilidade promovendo uma alternativa de alto armazenamento com velocidade e grande disponibilidade (Uniasselvi, p. 12).
A proposta do banco de dados NoSQL, não é extinguir o Modelo Relacional, mas utilizá-lo em casos em que é necessária uma maior flexibilidade na estruturação do banco de dados.
Sintetizando, a principal diferença entre empresas que utilizam banco de dados relacionais ou não relacional está na natureza dos dados que precisam armazenar e gerenciar. Empresas que utilizam banco de dados relacionais tem uma abordagem mais estruturada e normalizada de seus dados, o qual atendem suas necessidades específicas como empresas que precisam gerenciar recursos empresariais (ERP) ou sistema de gerenciamento com clientes (CRM).
Enquanto o banco de dados não relacional tem uma abordagem mais flexível e orientada a dados não estruturados, como imagens, dados de mídias sociais, logs de aplicativos, podendo lidar com uma variável gigante de informações, sem a necessidade de uma estrutura fixa. Um exemplo de empresa que utiliza banco de dados não relacional: Netflix, podendo armazenar e acessar rapidamente informações sobre o histórico de visualizações do usuário, preferências de gêneros, informações da conta, mesmo que em dispositivos diferentes.
Hoje, meu contato está sendo diretamente com o MongoDB, um banco de dados orientado a documentos, onde os dados são armazenados em formato BSON (Binary JSON), uma representação binária do JSON, e sabendo que o modelo de banco de dados não relacional precisa lidar com grande volume de dados, o formato BSON é mais eficiente em diversos fatores, principalmente em espaço e desempenho.
Quanto aos estudos sobre a estrutura do MongoDB ser orientado a documentos fiz algumas anotações importantes de serem mencionadas aqui:
⦁ O modelo de documentos torna mais fácil e mais rápido planejar como os dados do seu aplicativo corresponderão a dados armazenados no seu banco.
⦁ Modelo de documentos podem ser utilizados para modelar qualquer forma ou estrutura;
⦁ Altamente escalável, podendo lidar com grandes volumes de dados em tempo real;
⦁ Garante na performance, usando uma arquitetura de dados distribuída que permite que os dados sejam armazenados em vários servidores, resultando em consultas rápidas e eficientes,
⦁ Facilidade de desenvolvimento: Utiliza-se do conhecimento prévio dos desenvolvedores que trabalham com orientação a objetos, para um banco de dados que trabalha orientado a documentos.
Mas, vamos para uma ilustração simplificada de como é a orientação a documentos?
Nos artigos publicados pela AWS encontramos o seguinte, “A natureza flexível, semiestruturada e hierárquica dos documentos e dos bancos de dados de documentos permite que eles evoluam conforme as necessidades dos aplicativos. O modelo de documentos funciona bem com casos de uso como catálogos, perfis de usuários e sistemas de gerenciamento de conteúdo, onde cada documento é único e evolui com o passar do tempo. Os bancos de dados de documentos possibilitam uma indexação flexível, consultas ad hoc eficientes e análises de dados em grupos de documentos.”
Vamos aprofundar no exemplo seguinte, suponha que você trabalhe em uma biblioteca e queira guardar informações sobre os livros, usuários e empréstimos:
Primeiro, é necessário criar uma coleção de livros: Armazena então, as informações sobre os livros da biblioteca. Cada livro é um documento na coleção e contém campos como o título, autor, ano de publicação, editora, gênero, nº de cópias disponíveis, etc.
Agora, partimos para uma coleção de usuários das bibliotecas: nome, telefone, e-mail, endereço. Onde cada usuário é um documento desta coleção.
E, por fim, uma coleção de empréstimos: Essa coleção vai armazenar informações sobre os livros e sobre os usuários.
Cada empréstimo é um documento na coleção e contém campos como o ID do usuário, o ID do livro emprestado.
Então, retomando a nossa comparação com o banco de dado relacional:
Em SQL o armazenamento é em tabela, que é composta por linhas e colunas. Cada linha representa um registro individual e cada coluna representa um atributo desse registro, e os relacionamentos entre as tabelas são realizados por meio da chave estrangeira.
No caso de NoSQL orientado a documentos, a unidade de armazenamento é o documento, que pode conter múltiplos atributos e valores, que são armazenados em formatos de chave-valor. Isso é, em documento BSON, chave é uma string que identifica de forma única um valor podendo este, ser de diferentes tipos: string, número, booleano, objeto, array, e outros tipos de dados.
Voltando ao exemplo acima, por exemplo na coleção de livros:
As chaves “title” e “year” recebem tipos de valores diferentes.
Mas ainda durante os estudos, uma dúvida surgiu, a chave primária que é importantíssima no banco de dados relacional, não existe no banco de dados não relacional?
Bom, no MongoDB, cada documento é armazenado em uma coleção, e não em uma tabela como banco de dados relacional. Portanto, em vez de utilizar uma chave primária para identificar cada registro de uma tabela, o MongoDB usa o conceito de “_id”, que é um identificador único para cada documento em uma coleção. O “_id” é indexado automaticamente em um “ObjectId”, e por boas normas, a sugestão principal é não alterá-la, pois este é utilizado como identificador exclusivo para cada documento em uma coleção e é utilizado internamente pelo MongoDB para referenciar documentos em outras coleções, se o “_id” mudar pode quebrar referências e causar problema de integridade.
Claro que essa é só a ponta do que é banco de dados não relacional e MongoDB. Espero ter esclarecido algumas dúvidas referente a diferença entre SQL e NoSQL, e como estes se aplicam a diferentes objetivos empresariais.Além de ter sanado dúvidas sobre como o banco de dados NoSQL se garante em performance, e ter deixado o leitor um pouco mais curioso sobre as mais diversas atuação de um banco de dados não relacional.
FONTES:
AWS. O que é banco de dados de documento? Disponível em <https://aws.amazon.com/pt/nosql/document/>.
DATASIDE. Por que o serviço de banco de dados é essencial? Disponível em <https://www.dataside.com.br/post/por-que-o-servi%C3%A7o-de-banco-de-dados-%C3%A9-essencial>.
UNIASSELVI. Banco de Dados Relacional. Edição 1.