Desde que começaram a ser desenvolvidos no início da década de 1970, os bancos de dados SQL se tornaram um padrão no campo de armazenamento de dados. Entretanto, o aumento dos volumes armazenados e a necessidade de executar consultas em tempo real sobre grandes quantidades de dados levou gradualmente ao surgimento de novos modelos de armazenamento, conhecidos como NoSQL. Como estes bancos de dados SQL são altamente estendidos e estabelecidos na indústria, neste documento vamos nos concentrar em expor este outro tipo de banco de dados: os modelos NoSQL.
1. comparação do NoSQL com o SQL. O teorema da PAC
Antes de entrar em suas características, é importante mencionar outro conceito: o teorema da PAC. Cada banco de dados é baseado em três pilares: consistência, disponibilidade e tolerância de partição.
- ConsistênciaImportante em bancos de dados onde as transações são importantes, tais como os bancos.
- Disponibilidadecada consulta retornará dados, apesar de possíveis erros no sistema, embora estes possam não ser necessariamente consistentes (podem retornar resultados diferentes para dois clientes diferentes).
- Tolerância de partiçãoOs dados podem ser armazenados de forma distribuída em diferentes nós.
Embora estes sejam os três pilares de um banco de dados, não é possível que todos os três sejam cumpridos ao mesmo tempo. Eles serão sempre mutuamente exclusivos. Isto significa que em todos os casos dois dos pilares terão que ser priorizados em relação ao terceiro. É por isso que este teorema está representado no triângulo da PAC. A escolha do vértice a ser mudado dependerá de nossas necessidades.
O Bancos de dados SQL são baseadas no segmento CA: elas proporcionam consistência e disponibilidade. No entanto, isto é conseguido tendo todos os dados na mesma máquina, o que o torna intolerante à partição e, portanto, não escalável horizontalmente. Os bancos de dados que requerem transações normalmente se moverão neste ápice.
O Bancos de dados NoSQL será por definição escalável e, portanto, possuirá propriedade P. Assim, se a escalabilidade horizontal for uma necessidade, dependendo das propriedades que precisamos, teremos que optar por um CP ou um banco de dados AP.
Os bancos de dados da CP priorizam a consistência, para que a resposta seja sempre única. Mas isto é conseguido bloqueando o sistema para consultas em caso de duas consultas simultâneas ou uma falha (claro, até que esta falha seja corrigida), o que dá o risco de que uma consulta não retorne resultados. Essas soluções serão ideais no caso de bancos ou empresas onde as transações econômicas acontecem, pois priorizarão a correção da transação, mesmo correndo o risco de, em caso de falha, a transação não ocorrer.
Por outro lado, os bancos de dados da AP priorizam a disponibilidade. Isto significa que, em caso de falha (ou se o nó primário estiver ocupado), o sistema puxará uma das réplicas nos nós secundários. Isto significa que eles sempre retornarão resultados, mas corremos o risco de que a falha (ou operação simultânea) possa ter causado a perda de informações de modo que duas consultas dêem resultados diferentes. Estas soluções serão ideais quando estamos procurando a resposta a uma consulta em todos os momentos, mesmo que estas informações não sejam 100% precisas, para que possamos aplicá-las no uso de redes sociais ou sistemas que requerem consultas em tempo real.
2. bancos de dados NoSQL. Características gerais
Como mencionado na seção anterior, o Bancos de dados NoSQL são criados para preencher a lacuna deixada pelo SQL no triângulo CAP: a possibilidade de dividir os dados e oferecer escalabilidade horizontal. Além disso, o esquema rígido e predefinido dos bancos de dados SQL, embora funcionalmente muito útil, é um problema porque os dados são freqüentemente heterogêneos e não respondem a um esquema pré-definido. Como resultado, todos Bancos de dados NoSQL baseará suas propriedades em torno deste fator de escalabilidade horizontal e flexibilidade. Estas propriedades podem ser resumidas da seguinte forma:
- Esquemas flexíveis: a estrutura da tabela é perdida, diferentes níveis hierárquicos podem ser estabelecidos e até mesmo diferentes tipos de dados podem ser armazenados no mesmo campo.
- Nenhum esquema pré-definido: não é necessário pré-definir o esquema do banco de dados, mas novos campos podem ser adicionados a posteriori. Mesmo assim, é geralmente aconselhável ter uma estrutura pré-definida, mesmo que ela seja alterada posteriormente (isto é conhecido como dados semi-estruturados).
- Escalabilidade horizontal: Eles permitem a operação em grupos. Não é mais necessário ter todos os dados em uma única máquina, portanto, quando for necessário mais espaço ou capacidade de processamento, uma nova máquina pode ser acrescentada. Estas bases de dados são geralmente criadas para tornar este processo simples e dinâmico, sem a necessidade de reestruturação ou migração.
- Replicabilidade e alta disponibilidade: Ao operar em grupos, é possível ter várias cópias do mesmo documento em vários computadores, de modo que se um computador falhar, os outros assumem automaticamente o controle sem perda de dados ou desempenho.
- Particionado: Um dos maiores problemas no armazenamento de grandes quantidades de dados é que um banco de dados inteiro não pode ser armazenado em um único documento devido ao tamanho absoluto do documento. A possibilidade de particionamento é baseada no fato de que um documento pode ser distribuído por vários computadores, eliminando a necessidade de um único disco ter a capacidade de armazenar um conjunto inteiro de dados.
- Rapidez na consulta: À medida que os bancos de dados crescem em tamanho, os tempos de consulta SQL aumentam, especialmente quando são necessárias adesões. Diferentes estruturas de dados e arquiteturas agrupadas reduzem os tempos de consulta quando a quantidade de dados tratados é grande.
- Velocidade de processamento: quando você quiser realizar operações em todo o banco de dados, o Bancos de dados NoSQL possuem motores de processamento paralelo integrados, que reduzem os tempos de leitura e escrita em mesas grandes.
É importante notar que, embora o Bancos de dados NoSQL geralmente giram em torno destas propriedades, isto não significa que todos os bancos de dados NoSQL preencham todos eles, nem que todos os bancos de dados NoSQL sejam igualmente eficazes no preenchimento de todas as propriedades. Na verdade, os bancos de dados NoSQL são divididos em vários tipos, orientados para satisfazer algumas prioridades ou outras de acordo com diferentes necessidades. Entraremos em mais detalhes sobre estes aspectos nas seções seguintes.
3. tipos de bancos de dados NoSQL. Divisão por grupos
- Valor chave.
- Graphene.
- Séries cronológicas.
- Documentários.
- Colunar.
- Repositórios de conteúdo.