Dados não relacionais e NoSQL

0 3

Um banco de dados não relacional é um banco de dados que não usa o modo de linha e lista na maioria dos sistemas de banco de dados tradicionais. Em contraste, os bancos de dados não relacionais usam um modelo de armazenamento otimizado para os requisitos específicos do tipo de dados armazenados. Por exemplo, os dados podem ser armazenados como pares chave / valor simples, documentos JSON ou gráficos compostos de arestas e vértices.

O que esses armazenamentos de dados têm em comum é que eles não usam um modelo relacional. Além disso, eles tendem a ser mais específicos em termos dos tipos de dados que suportam e como consultar os dados. Por exemplo, o armazenamento de dados de série temporal é otimizado para consultas baseadas em tempo de sequências de dados, enquanto o armazenamento de dados gráficos é otimizado para explorar relacionamentos ponderados entre entidades. Para tarefas de gerenciamento de dados transacionais, nenhum desses dois formatos pode ser bem resumido.

O termo NoSQL se refere a um armazenamento de dados que não usa SQL para consultar, mas usa outras linguagens de programação e construções para consultar dados. Na verdade, “NoSQL” significa “banco de dados não relacional”, embora muitos desses bancos de dados suportem consultas compatíveis com SQL. No entanto, a estratégia de execução de consulta subjacente geralmente é muito diferente da maneira como o RDBMS tradicional executa a mesma consulta SQL.

Armazenamentos de dados de documentos

Os dados do documento são armazenados em entidades chamadas documentos para gerenciar um conjunto de campos de string nomeados e valores de dados do objeto. Normalmente, esses repositórios de dados armazenam dados na forma de documentos JSON.

Cada valor de campo pode ser um item escalar, como um número, ou um elemento composto, como uma lista ou uma coleção pai-filho. Os dados nos campos do documento podem ser codificados de várias maneiras, incluindo XML, YAML, JSON, BSON e até mesmo armazenados como texto simples. Os campos do documento são expostos ao sistema de gerenciamento de armazenamento, permitindo que os aplicativos consultem e filtrem dados usando os valores desses campos.

Normalmente, o documento contém todos os dados da entidade. Quais itens constituem a entidade são específicos do aplicativo. Por exemplo, as entidades podem conter informações detalhadas sobre clientes, pedidos ou uma combinação dos dois. Um único documento pode conter informações que serão distribuídas em várias tabelas relacionais no RDBMS. O repositório de documentos não exige que todos os documentos tenham a mesma estrutura. Essa abordagem de forma livre oferece grande flexibilidade. Por exemplo, o aplicativo pode armazenar dados diferentes no documento em resposta a mudanças nos requisitos de negócios.

O aplicativo pode recuperar o documento usando a chave do documento. Este é um identificador exclusivo para o documento e é geralmente codificado para ajudar a distribuir os dados uniformemente. Alguns bancos de dados de documentos criam chaves de documentos automaticamente. Outros permitem que você especifique o atributo do documento a ser usado como chave. O aplicativo também pode consultar documentos com base no valor de um ou mais campos. Alguns bancos de dados de documentos oferecem suporte à indexação para facilitar a pesquisa rápida de documentos com base em um ou mais campos indexados.

Muitos bancos de dados de documentos oferecem suporte a atualizações no local, permitindo que os aplicativos modifiquem o valor de campos específicos em um documento sem ter que reescrever todo o documento. As operações de leitura e gravação em vários campos em um único documento geralmente são atômicas.

Armazenamentos de dados de colunas

Família de colunas ou armazenamento de dados de família de colunas organiza os dados em colunas e linhas. Em sua forma mais simples, o armazenamento de dados do grupo de colunas é muito semelhante a um banco de dados relacional, pelo menos conceitualmente. O verdadeiro poder do banco de dados de família de colunas está em seu método de desanimalização para estruturas de dados esparsas, derivado do método de armazenamento de dados orientado a colunas.

Você pode pensar em um armazenamento de dados de família de colunas como contendo dados de tabela com linhas e colunas, mas as colunas são divididas em grupos chamados famílias de colunas. Cada família de colunas contém um grupo de colunas relacionadas logicamente, que são geralmente recuperadas ou operadas como uma unidade. Outros dados acessados ​​separadamente podem ser armazenados em uma família de colunas separada.

Em famílias de colunas, novas colunas podem ser adicionadas dinamicamente e as linhas podem ser esparsas (ou seja, as linhas não precisam especificar um valor para cada coluna).

A figura a seguir mostra um exemplo com duas famílias de colunas (identificação e informações de contato). Os dados de uma única entidade possuem a mesma chave de linha em cada família de colunas. Essa estrutura (a linha de um determinado objeto no grupo de colunas pode mudar dinamicamente) é uma vantagem importante do método do grupo de colunas, o que torna essa forma de armazenamento de dados muito adequada para armazenar dados com padrões diferentes.

Ao contrário dos repositórios de chave / valor ou bancos de dados de documentos, a maioria dos bancos de dados de famílias de colunas armazenam dados fisicamente na ordem das chaves, em vez de computar hashes. A chave de linha é considerada o índice primário e permite o acesso baseado em chave por meio de uma chave ou intervalo de chaves específico. Algumas implementações permitem criar índices secundários em colunas específicas do grupo de colunas. Os índices secundários permitem que você recupere dados por valor de coluna em vez de chave de linha.

No disco, todas as colunas da família de colunas são armazenadas no mesmo arquivo e cada arquivo possui um certo número de linhas. Para grandes conjuntos de dados, quando apenas algumas colunas são consultadas por vez, este método cria uma vantagem de desempenho, reduzindo a quantidade de dados que precisam ser lidos do disco.

As operações de leitura e gravação de uma linha são geralmente atômicas em uma única família de colunas, embora algumas implementações forneçam atomicidade no nível de linha em várias famílias de colunas.

Armazenamentos de dados de chave/valor

O armazenamento de chave / valor é essencialmente uma grande tabela hash. Você associa cada valor de dados a uma chave exclusiva e o armazenamento de valor / chave usa essa chave para armazenar os dados usando uma função hash apropriada. A função hash é escolhida para fornecer uma distribuição uniforme de chaves hash em todo o armazenamento de dados.

A maioria dos armazenamentos de valor / chave só oferece suporte a operações de exclusão, inserção e consulta simples. Para modificar o valor (parcial ou totalmente), o aplicativo deve substituir os dados existentes por todo o valor. Na maioria das implementações, ler ou gravar um único valor é uma operação atômica. Se o valor for grande, a gravação pode levar algum tempo.

Um aplicativo pode armazenar dados arbitrários como um conjunto de valores, embora algum armazenamento de valor / chave limite o tamanho máximo dos valores. O valor armazenado é opaco para o software do sistema de armazenamento. Qualquer informação de modo deve ser fornecida e interpretada pelo aplicativo. Essencialmente, o valor é um blob e o armazenamento de valor / chave apenas recupera ou armazena o valor por meio da chave.

O armazenamento de chave / valor é altamente otimizado para aplicativos que usam valores-chave ou realizam pesquisas simples em uma série de chaves, mas não é adequado para sistemas que precisam consultar dados em tabelas em vez de chaves / valores, como conectar vários dados das tabelas.

O armazenamento de chave / valor também não é otimizado para cenários onde a consulta de valor não chave ou filtragem é importante, em vez de realizar pesquisas com base apenas em chaves. Por exemplo, em um banco de dados relacional, você pode usar a cláusula WHERE para filtrar colunas não-chave para encontrar registros, mas os armazenamentos de chave / valor geralmente não têm o tipo de função de pesquisa para valores, ou se isso exigir uma verificação lenta de todos os valores.

O armazenamento de valor-chave pode ter grande escalabilidade porque o armazenamento de dados pode distribuir facilmente os dados entre vários nós em diferentes computadores.

Armazenamentos de dados de gráficos

O armazenamento de dados gráficos armazena dois tipos de informações: nós e arestas. Os nós representam entidades e os limites especificam os relacionamentos entre essas entidades. Tanto os nós quanto as bordas podem ter atributos que fornecem informações sobre o nó ou a borda, semelhantes às colunas de uma tabela. As bordas também podem ter direções que indicam a natureza do relacionamento.

O objetivo do armazenamento de dados gráficos é permitir que os aplicativos executem consultas com eficiência que atravessam a rede de nós e arestas e analisem os relacionamentos entre as entidades. A figura abaixo mostra os dados de pessoal da organização em forma de gráfico. As entidades são funcionários e departamentos, e as fronteiras indicam os departamentos onde o relacionamento e os funcionários atuam. Nesta figura, a seta ao lado indica a direção do relacionamento.

Essa estrutura facilita a execução de consultas como “Encontre todos os funcionários que se reportam direta ou indiretamente a Sarah” ou “Quem trabalha no mesmo departamento que John?” Para grandes gráficos contendo muitas entidades e relacionamentos, você pode realizar análises complexas rapidamente. Muitos bancos de dados gráficos fornecem uma linguagem de consulta que você pode usar para atravessar com eficácia a rede de relacionamentos.

 

 

Deixe uma resposta

Seu endereço de email não será publicado.