Obtenha soluções práticas para problemas comuns: Livro de receitas JavaScript da O'Reilly
Visão geral
Para ajudá-lo a entender melhor o NoSQL, esta página aborda:
- O que é NoSQL e para que serve um banco de dados NoSQL?
- Por que usar o NoSQL?
- Como funciona o NoSQL?
- Conclusão
Os bancos de dados NoSQL armazenam dados em documentos em vez de tabelas relacionais. Dessa forma, nós os classificamos como "não apenas SQL" e os subdividimos em uma variedade de modelos de dados flexíveis. Os tipos de bancos de dados NoSQL incluem bancos de dados de documentos puros, armazenamentos de valores-chave, bancos de dados de colunas amplas e bancos de dados de gráficos. Os bancos de dados NoSQL são criados desde o início para armazenar e processar grandes quantidades de dados em escala e dar suporte a um número crescente de empresas modernas.
O que é NoSQL e o que é um banco de dados NoSQL?
Banco de dados NoSQL A tecnologia NoSQL armazena informações em documentos JSON em vez de colunas e linhas usadas por bancos de dados relacionais. Para deixar claro, NoSQL significa "não apenas SQL" em vez de "sem SQL". Isso significa que um banco de dados JSON NoSQL pode armazenar e recuperar dados usando literalmente "nenhum SQL". Ou você pode combinar a flexibilidade do JSON com o poder do SQL para obter o melhor dos dois mundos. Consequentemente, os bancos de dados NoSQL são criados para serem flexíveis, dimensionáveis e capazes de responder rapidamente às demandas de gerenciamento de dados das empresas modernas. A seguir, definimos os quatro tipos mais populares de banco de dados NoSQL:
- Bancos de dados de documentos são criados principalmente para armazenar informações como documentos, incluindo, mas não se limitando a, documentos JSON. Esses sistemas também podem ser usados para armazenar documentos XML, por exemplo, em um banco de dados NoSQL.
- Armazenamento de valores-chave agrupam dados associados em coleções com registros que são identificados com chaves exclusivas para facilitar a recuperação. Os armazenamentos de valores-chave têm estrutura suficiente para refletir o valor dos bancos de dados relacionais (em oposição aos bancos de dados não relacionais) e, ao mesmo tempo, preservar os benefícios da estrutura do banco de dados NoSQL.
- Bancos de dados de colunas largas usam o formato tabular dos bancos de dados relacionais, mas permitem uma grande variação na forma como os dados são nomeados e formatados em cada linha, mesmo na mesma tabela. Assim como os armazenamentos de valores-chave, os bancos de dados de colunas amplas têm alguma estrutura NoSQL básica e, ao mesmo tempo, preservam muita flexibilidade
- Bancos de dados gráficos usam estruturas gráficas para definir as relações entre os pontos de dados armazenados. Os bancos de dados de gráficos são úteis para identificar padrões em informações não estruturadas e semiestruturadas.
Por que usar o NoSQL?
A experiência do cliente tornou-se rapidamente o mais importante diferencial competitivo e conduziu o mundo dos negócios a uma era de mudanças monumentais. Como parte dessa revolução, as empresas estão interagindo digitalmente - não apenas com seus clientes, mas também com seus funcionários, parceiros, fornecedores e até mesmo com seus produtos - em uma escala sem precedentes. Essa interação é alimentada pela Internet e por outras tecnologias do século XXI - e no centro da revolução do NoSQL estão os aplicativos de Big Data, nuvem, dispositivos móveis, mídia social e IoT de uma empresa.
Como esses aplicativos são diferentes dos aplicativos corporativos legados, como ERP, RH e contabilidade financeira? Os aplicativos atuais da Web, móveis e de IoT compartilham uma ou mais (se não todas) das seguintes características. Eles precisam:
- Suportar um grande número de usuários simultâneos (dezenas de milhares, talvez milhões)
- Ofereça experiências altamente responsivas a uma base de usuários distribuída globalmente
- Estar sempre disponível - sem tempo de inatividade
- Lidar com dados semi e não estruturados
- Adaptar-se rapidamente às mudanças de requisitos com atualizações frequentes e novos recursos
A criação e a execução desses aplicativos extremamente interativos criaram um novo conjunto de requisitos tecnológicos. A nova arquitetura de tecnologia NoSQL empresarial precisa ser muito mais ágil do que nunca e requer uma abordagem para o gerenciamento de dados em tempo real que possa acomodar níveis sem precedentes de escala, velocidade e variabilidade de dados. Os bancos de dados relacionais não conseguem atender a esses novos requisitos e, portanto, as empresas estão recorrendo aos tipos de bancos de dados NoSQL.
As empresas do Global 2000 estão adotando rapidamente os bancos de dados NoSQL para alimentar seus aplicativos de missão crítica:
- TescoA empresa de varejo número 1 da Europa implementa o NoSQL para comércio eletrônico, catálogo de produtos e outros aplicativos
- Marriott implementa o NoSQL para seu sistema de reservas que movimenta $38 bilhões anualmente
- GannettA Presto, a editora de jornais número 1 dos EUA, usa NoSQL para seu sistema de gerenciamento de conteúdo proprietário, o Presto
- GE implementa o NoSQL em sua plataforma Predix para ajudar a gerenciar a Internet Industrial
Cinco tendências que criam novos desafios técnicos que os bancos de dados NoSQL abordam
Essas empresas e centenas de outras como elas estão recorrendo ao NoSQL devido a cinco tendências que apresentam desafios técnicos muito difíceis para a maioria dos bancos de dados relacionais.
Essas empresas e centenas de outras como elas estão recorrendo ao NoSQL devido a cinco tendências que apresentam desafios técnicos muito difíceis para a maioria dos bancos de dados relacionais.
Tendências da economia digital |
Requisitos |
---|---|
1. Mais clientes estão acessando a Internet |
- Dimensionamento para suportar milhares, se não milhões, de usuários - Atender aos requisitos de UX com alto desempenho consistente - Manter a disponibilidade 24 horas por dia, 7 dias por semana |
2. A Internet está conectando tudo |
- Suporte a muitas coisas diferentes com estruturas de dados diferentes - Suporte a atualizações de hardware/software, gerando dados diferentes - Suporte a fluxos contínuos de dados em tempo real |
3. O Big Data está ficando maior |
- Armazenamento de dados semiestruturados/não estruturados gerados pelo cliente - Armazenamento de diferentes tipos de dados de diferentes fontes, juntos - Armazenamento de dados gerados por milhares/milhões de clientes/coisas |
4. Os aplicativos estão migrando para a nuvem |
- Dimensionamento sob demanda para dar suporte a mais clientes e armazenar mais dados - Aplicativos operacionais em escala global - clientes em todo o mundo - Minimização dos custos de infraestrutura, alcançando um tempo de comercialização mais rápido |
5. O mundo se tornou móvel |
- Criação de aplicativos "off-line primeiro" - não é necessária conexão de rede - Sincronização de dados móveis com bancos de dados remotos na nuvem - Suporte a várias plataformas móveis com um único back-end |
E quanto ao SQL?
Chamamos alguns bancos de dados relacionais de bancos de dados SQL por sua dependência do SQL (também conhecido como "linguagem de consulta estruturada") para recuperar informações relevantes. Introduzido pela primeira vez em 1979, o SQL agora é usado por desenvolvedores e analistas de dados em todo o mundo para localizar e gerar relatórios sobre dados armazenados em sistemas relacionais, como o Oracle.
Por que os bancos de dados relacionais são insuficientes
Os DBMS (sistemas de gerenciamento de banco de dados) relacionais nasceram na era dos mainframes e dos aplicativos de negócios - muito antes da Internet, da nuvem, do big data, dos dispositivos móveis e das empresas interativas em massa de hoje. Esses bancos de dados foram projetados para serem executados em um único servidor - quanto maior, melhor. A única maneira de aumentar a capacidade desses bancos de dados era atualizar os servidores - processadores, memória e armazenamento - para aumentar a escala.
Os bancos de dados NoSQL surgiram como resultado do crescimento exponencial da Internet e do aumento dos aplicativos da Web. O Google lançou O trabalho de pesquisa da Grande Mesa em 2006, e a Amazon lançou Trabalho de pesquisa sobre o Dynamo em 2007. Esses bancos de dados foram projetados para atender a uma nova geração de requisitos empresariais:
A necessidade de desenvolver com agilidade, para atender a requisitos variáveise para eliminar a transformação de dados.
Desenvolver com agilidade
Para permanecerem competitivas na atual economia digital focada na experiência, as empresas precisam inovar - e precisam fazer isso mais rápido do que nunca. E como essa inovação está centrada no desenvolvimento de aplicativos modernos da Web, móveis e de IoT, os desenvolvedores precisam fornecer aplicativos e serviços mais rapidamente do que nunca. A velocidade e a agilidade são essenciais porque esses aplicativos evoluem muito mais rapidamente do que os aplicativos legados, como o ERP. Os bancos de dados relacionais são um grande obstáculo, pois não suportam muito bem o desenvolvimento ágil devido ao seu modelo de dados fixo.
Definição do escopo para requisitos variáveis
Um princípio fundamental do desenvolvimento ágil é a adaptação à evolução dos requisitos do aplicativo: quando os requisitos mudam, o modelo de dados também muda. Isso é um problema para os bancos de dados relacionais porque o modelo de dados é fixo e definido por um esquema estático. Portanto, para alterar o modelo de dados, os desenvolvedores precisam modificar o esquema ou, pior ainda, solicitar uma "alteração de esquema" aos administradores do banco de dados. Isso atrasa ou interrompe o desenvolvimento, não só porque é um processo manual e demorado, mas também porque afeta outros aplicativos e serviços.
Por outro lado, um Banco de dados NoSQL O NoSQL oferece suporte total ao desenvolvimento ágil e não define de forma estática como os dados devem ser modelados. Em vez disso, o NoSQL deixa para os aplicativos e serviços e, portanto, para os desenvolvedores a definição de como os dados devem ser modelados. Com o NoSQL, o modelo de dados é definido pelo modelo de aplicativo. Os aplicativos e serviços modelam os dados como objetos.
Eliminar a transformação de dados
Os aplicativos e serviços modelam os dados como objetos (por exemplo, funcionário), os dados com vários valores como coleções (por exemplo, funções) e os dados relacionados como objetos ou coleções aninhados (por exemplo, gerente). No entanto, os bancos de dados relacionais modelam os dados como tabelas de linhas e colunas - dados relacionados como linhas dentro de tabelas diferentes e dados multivalorados como linhas dentro da mesma tabela.
O problema com os bancos de dados relacionais é que os dados são lidos e gravados por meio da desmontagem, ou "trituração", e remontagem de objetos. Essa é a "incompatibilidade de impedância" objeto-relacional. A solução alternativa é transformar os dados por meio de estruturas de mapeamento objeto-relacional, que são ineficientes, na melhor das hipóteses, e problemáticas, na pior. Os bancos de dados NoSQL geralmente lidam com os dados conforme eles são apresentados.
Como funciona o NoSQL?
Como o NoSQL se compara? Vamos dar uma olhada mais de perto. O seguinte tutorial de NoSQL ilustra um aplicativo usado para gerenciar currículos. Ele interage com currículos como um objeto (ou seja, o objeto do usuário), contém uma matriz para habilidades e tem uma coleção para cargos. Como alternativa, a gravação de um currículo em um banco de dados relacional exige que o aplicativo "destrua" o objeto do usuário.
O armazenamento desse currículo exigiria que o aplicativo inserisse seis linhas em três tabelas, conforme ilustrado em Figura 3.
Além disso, a leitura desse perfil exigiria que o aplicativo lesse seis linhas de três tabelas, conforme ilustrado em Figura 4.
Por outro lado, em um banco de dados orientado a documentos definido como NoSQL, o JSON é o formato de fato para armazenar dados - o que é útil, pois também é o padrão de fato para consumir e produzir dados para aplicativos da Web, móveis e de IoT. O JSON não apenas elimina a incompatibilidade de impedância objeto-relacional, mas também elimina a sobrecarga das estruturas ORM e simplifica o desenvolvimento de aplicativos porque os objetos são lidos e gravados sem "fragmentá-los" (ou seja, um único objeto pode ser lido ou gravado como um único documento), conforme ilustrado em Figura 5.
E quanto a consultas e SQL?
Alguns podem argumentar que é mais difícil consultar bancos de dados NoSQL, mas isso é um equívoco comum. A flexibilidade inerente dos bancos de dados NoSQL orientados a documentos permite lidar igualmente bem com dados estruturados e não estruturados, e as novas ferramentas permitem consultas mais rápidas do que nunca.
O Couchbase Server 4.0 introduziu o SQL++, uma poderosa linguagem de consulta que estende o SQL ao JSON, permitindo que os desenvolvedores aproveitem o poder do SQL e a flexibilidade do JSON. Ela não apenas oferece suporte a instruções SELECT / FROM / WHERE padrão, mas também a agregação (GROUP BY), classificação (SORT BY), junções (LEFT OUTER / INNER), bem como consulta a arrays e coleções aninhadas. Além disso, o desempenho da consulta pode ser aprimorado com índices compostos, parciais e de cobertura, entre outros.
SQL
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City
FROM AdventureWorks2016.Person.Person AS p
INNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN
(SELECT bea.BusinessEntityID, a.City
FROM AdventureWorks2016.Person.Address AS a
INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress AS bea
ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;
SQL++
SELECT RTRIM(p.FirstName) || ' ' || LTRIM(p.LastName) AS Name, d.City
FROM AdventureWorks2016.Person.Person AS p
INNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN
(SELECT bea.BusinessEntityID, a.City
FROM AdventureWorks2016.Person.Address AS a
INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress AS bea
ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;
Saiba mais sobre consultas
Tutorial de SQL++ O que é o SQL++? Execute sua primeira consulta Experimente gratuitamenteOperar em qualquer escala
Os bancos de dados que suportam aplicativos da Web, móveis e de IoT devem ser capazes de operar em qualquer escala. Embora seja possível escalonar um banco de dados relacional como o Oracle (usando, por exemplo, o Oracle RAC), isso geralmente é complexo, caro e não é totalmente confiável. Com o Oracle, por exemplo, o escalonamento usando a tecnologia RAC requer vários componentes e cria um único ponto de falha que compromete a disponibilidade. Por outro lado, um banco de dados distribuído NoSQL - projetado com uma arquitetura de expansão horizontal e sem ponto único de falha - oferece vantagens operacionais atraentes.
Elasticidade para desempenho em escala
Os aplicativos e serviços precisam dar suporte a um número cada vez maior de usuários e dados - de centenas a milhares e milhões de usuários, e de gigabytes a terabytes de dados operacionais. Ao mesmo tempo, eles precisam ser dimensionados para manter o desempenho e precisam fazer isso de forma eficiente.
O banco de dados deve ser capaz de escalonar leituras, gravações e armazenamento.
Esse é um problema para os bancos de dados relacionais que estão limitados ao escalonamento (ou seja, adicionar mais processadores, memória e armazenamento a um único servidor físico). Como resultado, a capacidade de escalonar com eficiência e sob demanda é um desafio. Isso se torna cada vez mais caro porque as empresas precisam comprar servidores cada vez maiores para acomodar mais usuários e mais dados. Além disso, isso pode resultar em tempo de inatividade se o banco de dados tiver que ser colocado off-line para realizar atualizações de hardware.
Um banco de dados NoSQL distribuído, no entanto, aproveita o hardware de commodity para expandir, ou seja, adicionar mais recursos simplesmente acrescentando mais servidores. A capacidade de ampliação permite que as empresas ampliem com mais eficiência: (a) implantando não mais hardware do que o necessário para atender à carga atual; (b) aproveitando hardware e/ou infraestrutura de nuvem mais baratos; e (c) ampliando sob demanda e sem tempo de inatividade.
Além de poderem ser escalonados de forma eficaz e eficiente, os bancos de dados NoSQL distribuídos são fáceis de instalar, configurar e escalonar. Eles foram projetados para distribuir leituras, gravações e armazenamento, e foram projetados para operar em qualquer escala, incluindo o gerenciamento e o monitoramento de clusters pequenos e grandes.
Disponibilidade para implementação global e sempre ativa
À medida que mais e mais interações com os clientes ocorrem on-line por meio de aplicativos móveis e da Web, a disponibilidade se torna uma preocupação importante, se não a principal. Esses aplicativos de missão crítica precisam estar disponíveis 24 horas por dia, 7 dias por semana - sem exceções. Oferecer disponibilidade 24 horas por dia, 7 dias por semana é um desafio para os bancos de dados relacionais que são implementados em um único servidor físico ou que dependem de clustering com armazenamento compartilhado. Se for implantado como um único servidor e ele falhar, ou como um cluster e o armazenamento compartilhado falhar, o banco de dados ficará indisponível.
Em contraste com a tecnologia relacional, um banco de dados NoSQL distribuído particiona e distribui dados para várias instâncias de banco de dados sem recursos compartilhados. Além disso, os dados podem ser replicados em uma ou mais instâncias para alta disponibilidade (replicação intercluster). Embora os bancos de dados relacionais, como o Oracle, exijam um software separado para replicação (por exemplo, Oracle Active Data Guard), os bancos de dados NoSQL não precisam disso - ele é integrado e automático. Além disso, o failover automático garante que, se um nó falhar, o banco de dados poderá continuar a realizar leituras e gravações enviando as solicitações para um nó diferente.
À medida que os compromissos com os clientes se tornam on-line, a necessidade de estar disponível em vários países e/ou regiões torna-se fundamental. Embora a implantação de um banco de dados em vários data centers aumente a disponibilidade e ajude na recuperação de desastres, ela também tem a vantagem de aumentar o desempenho, pois todas as leituras e gravações podem ser executadas no data center mais próximo, reduzindo assim a latência.
Garantir a disponibilidade global é difícil para os bancos de dados relacionais nos casos em que a exigência de complementos separados aumenta a complexidade (por exemplo, a Oracle exige o Oracle GoldenGate para mover dados entre bancos de dados) ou quando a replicação entre vários datacenters só pode ser usada para failover porque apenas um datacenter está ativo por vez. Além disso, ao replicar entre datacenters, os aplicativos criados em bancos de dados relacionais podem sofrer degradação de desempenho ou descobrir que os datacenters estão muito fora de sincronia.
Um banco de dados NoSQL distribuído inclui replicação integrada entre os data centers - não é necessário nenhum software separado. Além disso, alguns incluem replicação unidirecional e bidirecional, permitindo implantações ativas-ativas completas em vários data centers, o que permite que o banco de dados seja implantado em vários países e/ou regiões e forneça acesso local aos dados para aplicativos locais e seus usuários. Isso não apenas melhora o desempenho, mas também permite o failover imediato por meio de roteadores de hardware - os aplicativos não precisam esperar que o banco de dados descubra a falha e execute seu próprio failover.
Conclusão
Então, o que são bancos de dados NoSQL e por que eles são importantes agora? À medida que as empresas mudam para a economia digital - possibilitada por tecnologias de nuvem, móveis, mídias sociais e Big Data - os desenvolvedores e as equipes de operações precisam criar e manter aplicativos da Web, móveis e de IoT cada vez mais rapidamente e em maior escala. O NoSQL flexível e de alto desempenho é cada vez mais a tecnologia de banco de dados preferida para alimentar os aplicativos atuais da Web, móveis e de IoT.
Centenas de empresas da Global 2000, juntamente com dezenas de milhares de empresas menores e startups, adotaram o NoSQL. Para muitas delas, o uso do NoSQL começou com um cache, uma prova de conceito ou um pequeno aplicativo, depois se expandiu para aplicativos de missão crítica e agora é a base de todo o desenvolvimento de aplicativos.
Com os bancos de dados NoSQL, as empresas têm mais condições de desenvolver com agilidade e operar em qualquer escala, além de oferecer o desempenho e a disponibilidade necessários para atender às demandas dos negócios da economia digital.