NoSQL, também conhecido como "não apenas SQL", "não SQL", é uma abordagem de design de banco de dados que permite o armazenamento e consulta de dados fora das estruturas tradicionais encontradas em bancos de dados relacionais. Embora ainda possa armazenar dados encontrados em sistemas de gerenciamento de banco de dados relacional (RDBMS), ele apenas os armazena de maneira diferente em comparação com um RDBMS. A decisão de usar um banco de dados relacional versus um banco de dados não relacional é amplamente contextual e varia dependendo do caso de uso.
Em vez da estrutura tabular típica de um banco de dados relacional, os bancos de dados NoSQL armazenam dados em uma estrutura de dados, como um documento JSON. Como esse design de banco de dados não relacional não requer um esquema, ele oferece escalabilidade rápida para gerenciar conjuntos de dados grandes e normalmente não estruturados.
O NoSQL também é um tipo de banco de dados distribuído, o que significa que as informações são copiadas e armazenadas em vários servidores, que podem ser remotos ou locais. Isso garante disponibilidade e confiabilidade de dados. Se alguns dos dados ficarem off-line, o restante do banco de dados poderá continuar em execução.
Hoje, as empresas precisam gerenciar grandes volumes de dados em alta velocidade com a capacidade de escalar rapidamente para executar aplicativos da Web modernos em quase todos os setores. Nesta era de crescimento na cloud, big data e aplicativos móveis e da web, os bancos de dados NoSQL fornecem essa velocidade e escalabilidade, tornando-os uma escolha popular por seu desempenho e facilidade de uso.
A linguagem de consulta estruturada (SQL) é comumente referenciada em relação ao NoSQL. Para entender melhor a diferença entre NoSQL e SQL, pode ser útil entender a história do SQL, uma linguagem de programação usada para recuperar informações específicas de um banco de dados.
Antes dos bancos de dados relacionais, as empresas usavam um sistema de banco de dados hierárquico com uma estrutura semelhante a uma árvore para as tabelas de dados. Esses primeiros sistemas de gerenciamento de banco de dados (DBMS) permitiam que os usuários organizassem grandes quantidades de dados. No entanto, eles eram complexos, geralmente proprietários de um aplicativo específico e limitados nas formas como podiam ser descobertos nos dados. Essas limitações acabaram levando ao desenvolvimento de sistemas de gerenciamento de banco de dados relacionais, que organizam os dados em tabelas. O SQL forneceu uma interface para interagir com dados relacionais, permitindo que os analistas conectassem tabelas mesclando campos comuns.
Com o passar do tempo, as demandas por uso mais rápido e díspar de grandes conjuntos de dados tornaram-se cada vez mais importantes para tecnologias emergentes, como aplicativos de comércio eletrônico. Os programadores precisavam de algo mais flexível do que bancos de dados SQL (ou seja, bancos de dados relacionais). O NoSQL tornou-se essa alternativa.
Embora o NoSQL tenha fornecido uma alternativa ao SQL, esse avanço não substituiu os bancos de dados SQL. Por exemplo, digamos que você esteja gerenciando pedidos de varejo em uma empresa. Em um modelo relacional, as tabelas individuais gerenciariam os dados do cliente, os dados do pedido e os dados do produto separadamente e seriam unidos por meio de uma chave única e comum, como um ID do cliente ou um ID do pedido. Embora isso seja ótimo para armazenar e recuperar dados rapidamente, requer memória significativa. Quando você deseja adicionar mais memória, os bancos de dados SQL só podem ser dimensionados verticalmente, não horizontalmente, o que significa que sua capacidade de incluir mais memória é limitada ao hardware que você possui. O resultado é que a escala vertical acaba por limitar o armazenamento e a recuperação de dados de sua empresa.
Em comparação, os bancos de dados NoSQL não são relacionais, o que elimina a necessidade de conectar tabelas.Suas capacidades embutidas de fragmentação e alta disponibilidade facilitam o ajuste de escala horizontal. Se um único servidor de banco de dados não for suficiente para armazenar todos os seus dados ou lidar com todas as consultas, a carga de trabalho poderá ser dividida em dois ou mais servidores, permitindo que as empresas escalem seus dados horizontalmente.
Embora cada tipo de banco de dados tenha suas próprias vantagens, as empresas geralmente utilizam bancos de dados NoSQL e relacionais em um único aplicativo. Os provedores de cloud de hoje podem oferecer suporte a bancos de dados SQL ou NoSQL. O banco de dados que você escolher depende dos seus objetivos.
Para saber mais sobre as diferenças entre as duas opções, consulte "Bancos de dados SQL vs. NoSQL: qual é a diferença?"
O NoSQL fornece outras opções para organizar dados de várias maneiras. Ao oferecer diversas estruturas de dados, o NoSQL pode ser aplicado para análise de dados, gerenciamento de big data, redes sociais e desenvolvimento de aplicativos móveis.
Um banco de dados NoSQL gerencia informações usando qualquer um desses modelos de dados primários:
Isso é normalmente considerado a forma mais simples de bancos de dados NoSQL. Esse modelo de dados sem esquema é organizado em um dicionário de pares chave-valor, onde cada item possui uma chave e um valor. A chave pode ser algo semelhante encontrado em um banco de dados SQL, como um ID de carrinho de compras, enquanto o valor é uma matriz de dados, como cada item individual no carrinho de compras do usuário. É comumente usado para armazenar em cache e armazenar informações de sessão do usuário, como carrinhos de compras. No entanto, não é ideal quando você precisa extrair vários registros de uma vez. Redis e Memcached são exemplos de bancos de dados chave-valor de software livre.
Conforme sugerido pelo nome, os bancos de dados de documentos armazenam dados como documentos. Eles podem ser úteis no gerenciamento de dados semiestruturados, e os dados geralmente são armazenados nos formatos JSON, XML ou BSON. Isso mantém os dados juntos quando são usados em aplicativos, reduzindo a quantidade de conversão necessária para usar os dados. Os desenvolvedores também ganham mais flexibilidade, pois os esquemas de dados não precisam corresponder entre os documentos (por exemplo, nome x primeiro_nome). No entanto, isso pode ser problemático para transações complexas, levando à corrupção de dados. Os casos de uso populares de bancos de dados de documentos incluem sistemas de gerenciamento de conteúdo e perfis de usuário. Um exemplo de banco de dados orientado a documentos é o MongoDB, o componente de banco de dados da pilha MEAN.
Quer saber mais sobre o MongoBD? Confira o tutorial IBM em introdução ao uso do IBM Cloud Databases for MongoDB.
Esses bancos de dados armazenam informações em colunas, permitindo que os usuários acessem apenas as colunas específicas de que precisam, sem alocar memória adicional para dados irrelevantes. Esse banco de dados tenta solucionar as deficiências de armazenamento de chave-valor e documentos, mas, como pode ser um sistema mais complexo de gerenciar, não é recomendado para equipes e projetos mais novos. O Apache HBase e o Apache Cassandra são exemplos de bancos de dados de coluna e software livre. O Apache HBase foi desenvolvido sobre o Hadoop Distributed Files System que fornece uma maneira de armazenar conjuntos de dados esparsos, que é comumente usado em muitos aplicativos de big data. O Apache Cassandra, por outro lado, foi projetado para gerenciar grandes quantidades de dados em vários servidores e clusters que abrangem vários centros de dados. Tem sido usado para uma variedade de casos de uso, como sites de redes sociais e análise de dados em tempo real.
Esse tipo de banco de dados geralmente armazena dados de um gráfico de conhecimento. Os elementos de dados são armazenados como nós, bordas e propriedades. Qualquer objeto, lugar ou pessoa pode ser um nó. Uma borda define o relacionamento entre os nós. Por exemplo, um nó pode ser um cliente, como a IBM, e uma agência, como a Ogilvy. Uma vantagem seria categorizar o relacionamento como um relacionamento com o cliente entre a IBM e a Ogilvy.
Os bancos de dados de gráficos são usados para armazenar e gerenciar uma rede de conexões entre os elementos dentro do gráfico. O Neo4j (link externo à IBM), é um serviço de banco de dados baseado em gráfico baseado em Java com uma edição comunitária de software livre onde os usuários podem adquirir licenças para backup on-line e extensões de alta disponibilidade, ou versão licenciada pré-embalada com backup e extensões incluídas.
Com esse tipo de banco de dados, como o IBM solidDB, os dados residem na memória principal e não no disco, tornando o acesso aos dados mais rápido do que com bancos de dados convencionais baseados em disco.
Muitas empresas entraram no cenário NoSQL. Além dos mencionados acima, aqui estão alguns bancos de dados NoSQL populares:
Para saber mais sobre o estado dos bancos de dados, consulte "Uma breve visão geral do cenário do banco de dados".
Cada tipo de banco de dados NoSQL possui pontos fortes que o tornam melhor para casos de uso específicos. No entanto, todos eles compartilham os seguintes benefícios para desenvolvedores e criam o framework para fornecer melhores serviços aos clientes, incluindo:
Resumindo, os bancos de dados NoSQL fornecem alto desempenho, disponibilidade e escalabilidade.
A estrutura e o tipo de banco de dados NoSQL escolhido dependerão de como sua organização planeja usá-lo. Aqui estão alguns usos específicos para vários tipos de bancos de dados NoSQL.
A necessidade das grandes empresas de fornecer serviços sem latência e escalar mais rapidamente estimulou o crescimento dos microsserviços o que levou as empresas a examinar qual tipo de banco de dados usar para diferentes aplicativos.
As empresas descobriram que usar um único banco de dados relacional para cada componente de um aplicativo tem suas limitações, especialmente quando existem alternativas melhores para componentes específicos. Os microsserviços são uma opção atraente, em parte, porque eliminam a necessidade de um único armazenamento de dados compartilhado para um aplicativo inteiro. Em vez disso, o aplicativo tem muitos serviços livremente acoplados e implementáveis de forma independente, cada um com seu próprio modelo de dados e banco de dados, e integrados via APIgateways ou um iPaaS.
O padrão de uso de vários bancos de dados em um único aplicativo, também conhecido como persistência poliglota, ajudou a criar espaço no mercado para que os bancos de dados NoSQL prosperassem. Hoje, os desenvolvedores podem aproveitar o banco de dados certo para o microsserviço certo sem tentar fazer tudo funcionar no contexto de um único banco de dados relacional.
Conheça os diferentes fatores a serem considerados ao tentar determinar as melhores opções de banco de dados ao refatorar para uma abordagem de microsserviços.
Saiba mais sobre Microsserviços (ou arquitetura de microsserviços), uma abordagem de arquitetura nativa da cloud na qual um único aplicativo é composto de muitos componentes ou serviços menores fracamente acoplados e implementáveis de forma independente.
Conheça as principais diferenças entre bancos de dados SQL e NoSQL e saiba qual tipo de banco de dados é melhor para vários casos de uso.
Saiba como acelerar a mudança para as compras on-line.