Entender os modelos de armazenamento de dados

Os sistemas empresariais modernos gerenciam volumes de dados heterogêneos cada vez maiores. Essa heterogeneidade significa que um armazenamento de dados único geralmente não é a melhor abordagem. Em vez disso, muitas vezes é melhor armazenar diferentes tipos de dados em diferentes armazenamentos de dados, cada um com foco em uma carga de trabalho ou padrão de uso específico. O termo persistência poliglota é utilizado para descrever soluções que usam uma combinação de tecnologias de armazenamento de dados. Portanto, é importante entender os principais modelos de armazenamento e suas vantagens e desvantagens.

Selecionar o armazenamento de dados certo para seus requisitos é uma decisão de design chave. Literalmente, há centenas de implementações para escolher entre Banco de dados NoSQL e SQL. Os armazenamentos de dados geralmente são categorizados por como eles estruturam dados e os tipos de operações às quais fornecem suporte. Este artigo descreve vários dos modelos de armazenamentos mais comuns. Note que uma tecnologia de armazenamento de dados particular pode fornecer suporte a vários modelos de armazenamento. Por exemplo, um RDBMS (sistemas de gerenciamento de banco de dados relacional) também pode fornecer suporte de armazenamento de gráfico ou valor/chave. Na verdade, há uma tendência geral para o chamado suporte multimodelo, em que um sistema de banco de dados individual dá suporte a vários modelos. Mas, ainda é útil entender os diferentes modelos em um nível alto.

Nem todos os armazenamentos de dados em uma determinada categoria fornecem o mesmo conjunto de recursos. A maioria dos armazenamentos de dados fornece funcionalidade do lado do servidor para consultar e processar dados. Às vezes, essa funcionalidade está integrada no mecanismo de armazenamento de dados. Em outros casos, os recursos de processamento e armazenamento de dados são separados e pode haver diversas opções de análise e processamento. Os armazenamentos de dados também fornecem suporte para diferentes interfaces de gerenciamento e programáticas.

Geralmente, você deve iniciar considerando qual modelo de armazenamento é o mais adequado às suas necessidades. Em seguida, considere um armazenamento de dados específico dentro dessa categoria, com base em fatores como o conjunto de recursos, custos e a facilidade de gerenciamento.

Observação

Saiba mais sobre como identificar e examinar os requisitos de serviço de dados para a adoção da nuvem no Microsoft Cloud Adoption Framework para Azure. Você também pode saber mais sobre como selecionar ferramentas e serviços de armazenamento.

Sistemas de gerenciamento de banco de dados relacional

Os bancos de dados relacionais organizam dados como uma série de tabelas bidimensionais com linhas e colunas. A maioria dos fornecedores fornece um dialeto de linguagem SQL para recuperar e gerenciar dados. Um RDBMS tipicamente implementa um mecanismo consistente de forma transacional que está em conformidade com o modelo ACID (Atômico, Consistente, Isolado, Durável) para atualizar informações.

Um RDBMS geralmente fornece suporte para um modelo de esquema em gravação, onde a estrutura de dados é definida antecipadamente e todas as operações de leitura ou gravação devem utilizar o esquema.

Esse modelo é muito útil quando garantias de coerência forte são importantes, em que todas as alterações são atômicas e as transações sempre deixam os dados em um estado coerente. No entanto, um RDBMS geralmente não escala horizontalmente sem que os dados seja fragmentados de alguma forma. Além disso, os dados em um RDBMS devem ser normalizados, o que não é adequado para todo conjunto de dados.

Serviços do Azure

Carga de trabalho

  • Os registros são criados e atualizados com frequência.
  • Várias operações precisam ser concluídas em uma única transação.
  • As relações são impostas usando restrições de banco de dados.
  • Os índices são usados para otimizar o desempenho da consulta.

Tipo de dados

  • Os dados são altamente normalizados.
  • Esquemas de banco de dados são necessários e impostos.
  • Relações muitos para muitos entre as entidades de dados no banco de dados.
  • As restrições são definidas no esquema e impostas nos dados no banco de dados.
  • Os dados exigem alta integridade. Os índices e as relações precisam ser mantidos com precisão.
  • Os dados requerem consistência forte. As transações operam de forma a garantir que todos os dados sejam 100% consistentes para todos os usuários e processos.
  • O tamanho das entradas de dados individuais é de pequeno a médio porte.

Exemplos

  • Gerenciamento de estoque
  • Gerenciamento de pedidos
  • Banco de dados de relatórios
  • Contabilidade

Armazenamentos de valor/chave

Um armazenamento de pares chave-valor associa cada valor de dados a uma chave exclusiva. A maioria dos armazenamentos de valor/chave fornecem suporte apenas às operações de exclusão, inserção e consulta simples. Para modificar um valor (parcial ou completamente), um aplicativo deverá substituir os dados existentes para todo o valor. Na maioria das implementações, a leitura ou gravação de um único valor é uma operação atômica.

Um aplicativo pode armazenar dados arbitrários como um conjunto de valores. As informações de esquema precisarão ser fornecidas e interpretadas pelo aplicativo. O armazenamento de pares chave-valor simplesmente recupera ou armazena o valor por chave.

Diagrama de um repositório de chave-valor

Os armazenamentos de pares chave-valor são altamente otimizados para aplicativos que realizam pesquisas simples, mas são menos adequados para sistemas que precisam consultar dados em diferentes armazenamentos de pares chave-valor. Os armazenamentos de pares chave-valor também não são otimizados para consultar por valor.

Um armazenamento de valor/chave pode ser extremamente escalável, pois o armazenamento de dados pode facilmente distribuir dados em vários nós em computadores separadas.

Serviços do Azure

Carga de trabalho

  • Os dados são acessados ​​usando uma só chave, como em um dicionário.
  • Associações, bloqueios ou uniões não são necessários.
  • Mecanismos de agregação não são usados.
  • Os índices secundários geralmente não são usados.

Tipo de dados

  • Cada chave está associada a um só valor.
  • Não há imposição do esquema.
  • Não há relações entre entidades.

Exemplos

  • Armazenamento de dados em cache
  • Gerenciamento da sessão
  • Preferência do usuário e gerenciamento de perfil
  • Recomendação de produtos e veiculação de anúncios

Bancos de dados de documentos

Um banco de dados de documentos armazena uma coleção de documentos, em que cada documento é composto por campos e dados nomeados. Os dados podem ser valores simples ou elementos complexos, como listas e coleções filho. Os documentos são recuperados por chaves exclusivas.

Normalmente, um documento contém os dados de uma só entidade, como um cliente ou um pedido. Um documento pode conter informações que se espalham em várias tabelas relacionais em um RDBMS. Os documentos não precisam ter a mesma estrutura. Os aplicativos podem armazenar dados diferentes em documentos conforme os requisitos empresariais mudam.

Diagrama de um repositório de documentos

Serviço do Azure

Carga de trabalho

  • As operações de inserção e atualização são comuns.
  • Não há incompatibilidade de impedância relacional de objeto. Os documentos correspondem melhor às estruturas de objeto usadas no código do aplicativo.
  • Os documentos individuais são recuperados e gravados como um único bloco.
  • Os dados requerem um índice de vários campos.

Tipo de dados

  • Os dados podem ser gerenciados de forma desordenada.
  • O tamanho dos dados do documento individual é relativamente pequeno.
  • Cada tipo de documento pode usar seu próprio esquema.
  • Os documentos podem incluir campos opcionais.
  • Os dados de documento são semi-estruturados, o que significa que os tipos de dados de cada campo não são estritamente definidos.

Exemplos

  • Catálogo de produtos
  • Gerenciamento de conteúdo
  • Gerenciamento de estoque

Bancos de dados de grafo

Um banco de dados de gráfico armazena dois tipos de informações, nós e bordas. As bordas especificam os relacionamentos entre os nós. Tanto os nós quanto as bordas podem ter propriedades que fornecem informações sobre o nó ou a borda questão, semelhante às colunas em uma tabela. As bordas também podem ter uma direção indicando a natureza do relacionamento.

Os bancos de dados de grafo podem executar consultas com eficiência na rede de nós e bordas, além de analisar os relacionamentos entre as entidades. O diagrama a seguir mostra o banco de dados de pessoal de uma organização estruturado como um grafo. As entidades são funcionários e departamentos, e as bordas indicam os relacionamentos de subordinação e os departamentos em que os funcionários trabalham.

Diagrama de um banco de dados de documentos

Essa estrutura simplifica a execução de consultas como "Encontrar todos os funcionários que são subordinados diretos ou indiretos de Marina" ou "Quem trabalha no mesmo departamento que Júlio?". Para grafos grandes com muitas entidades e relacionamentos, você pode executar análises complexas rapidamente. Muitos bancos de dados de gráficos fornecem uma linguagem de consulta que você pode utilizar para percorrer uma rede de relacionamentos de forma eficiente.

Serviços do Azure

Carga de trabalho

  • Os relacionamentos complexos entre os itens de dados envolvem vários saltos entre os itens de dados relacionados.
  • A relação entre os itens de dados são dinâmicas e mudam com o passar do tempo.
  • As relações entre objetos são de primeira classe, sem precisar de chaves estrangeiras e ingressos para serem percorridas.

Tipo de dados

  • Nós e relacionamentos.
  • Nós são semelhantes às linhas da tabela ou documentos JSON.
  • As relações são tão importantes quanto os nós e são expostas diretamente na linguagem de consulta.
  • Objetos de composição, como uma pessoa com vários números de telefone, tendem a ser divididos em nós menores combinado com relações navegáveis

Exemplos

  • Quadros da organização
  • Gráficos sociais
  • Detecção de fraude
  • Mecanismos de recomendação

Análise de dados

Os armazenamentos de análise de dados fornecem soluções massivamente paralelas para ingerir, armazenar e analisar dados. Os dados são distribuídos em vários servidores para maximizar a escalabilidade. Formatos de arquivo de dados grandes, como CSV (arquivos delimitadores), Parquet e ORC, são amplamente usados na análise de dados. Dados históricos normalmente são armazenados em armazenamentos de dados, como o Armazenamento de Blobs ou o Azure Data Lake Storage Gen2, que são acessados pelo Azure Synapse, pelo Databricks ou pelo HDInsight como tabelas externas. Um cenário típico que usa dados armazenados como arquivos Parquet para desempenho é descrito no artigo Usar tabelas externas com o SQL do Synapse.

Serviços do Azure

Carga de trabalho

  • Análise de dados
  • Enterprise BI

Tipo de dados

  • Dados históricos de várias fontes.
  • Geralmente desordenado em um esquema de “estrela” ou “floco de neve”, consistindo em tabelas de dimensões e fatos.
  • Geralmente é carregado com novos dados de forma programada.
  • As tabelas de dimensões geralmente incluem várias versões históricas de uma entidade, conhecida como uma dimensão de alteração lenta.

Exemplos

  • Enterprise Data Warehouse

Bancos de dados de família de coluna

Um banco de dados de família de coluna organiza dados em linhas e colunas. Na sua forma mais simples, um banco de dados de família de coluna pode parecer muito semelhante a um banco de dados relacional, pelo menos conceitualmente. O poder real de uma base de dados de família de coluna reside na sua abordagem desnormalizada para estruturar dados esparsos.

É possível pensar em um banco de dados de família de coluna como dados de tabela com linhas e colunas, mas as colunas são divididas em grupos conhecidos como famílias de coluna. Cada família de coluna contém um conjunto de colunas que estão logicamente relacionadas e geralmente são recuperadas ou manipuladas como uma unidade. Outros dados acessados separadamente podem ser armazenados em famílias de colunas separadas. Dentro de uma família de colunas, novas colunas podem ser adicionadas dinamicamente e as linhas podem ser esparsas (ou seja, uma linha não precisa ter um valor para cada coluna).

O diagrama a seguir mostra um exemplo com duas famílias de colunas, Identity e Contact Info. Os dados de uma única entidade possuem a mesma chave de linha em cada família de coluna. Essa estrutura, em que as linhas de um determinado objeto em uma família de coluna pode variar dinamicamente, é um benefício importante da abordagem de família de coluna, que torna essa forma de armazenamento de dados altamente adequada para armazenar dados voláteis e estruturados.

Diagrama de um banco de dados de família de coluna

Ao contrário de um armazenamento de valor/chave ou um banco de dados de documentos, a maioria dos bancos de dados de família de coluna armazenam dados em ordem de chave, em vez de computar um hash. Muitas implementações permitem que você crie índices sobre colunas específicas em uma família de coluna. Os índices permitem recuperar dados por valor de colunas, em vez de chave de linha.

As operações de leitura e gravação para uma linha geralmente são atômicas com uma família de coluna única, embora algumas implementações ofereçam atomicidade em toda a linha, abrangendo múltiplas famílias de colunas.

Serviços do Azure

Carga de trabalho

  • A maioria dos bancos de dados de famílias de colunas executam operações de gravação muito rapidamente.
  • As operações de atualização e exclusão são raras.
  • Projetado para fornecer acesso com alta taxa de transferência e baixa latência.
  • Dá suporte ao acesso de consulta fácil para determinado conjunto de campos dentro de um registro muito maior.
  • Amplamente escalonável.

Tipo de dados

  • Os dados são armazenados em tabelas compostas por uma coluna de chave e uma ou mais famílias de colunas.
  • As colunas específicas podem variar conforme as linhas individuais.
  • As células individuais são acessadas por meio de comandos get e put
  • Várias linhas são retornadas usando um comando de verificação.

Exemplos

  • Recomendações
  • Personalização
  • Dados de sensor
  • Telemetria
  • Mensagens
  • Análise de mídia social
  • Análise da Web
  • Monitorando de atividades
  • Previsão do tempo e outros dados de série temporal

Banco de dados de mecanismo de pesquisa

Um banco de dados de um mecanismo de pesquisa permite que os aplicativos pesquisem informações mantidas em armazenamentos de dados externos. Um banco de dados de mecanismo de pesquisa pode indexar grandes volumes de dados e fornecer acesso a esses índices quase em tempo real.

Os índices podem ser multidimensionais e fornecer suporte para buscas de texto livre em grandes volumes de dados de texto. A indexação pode ser realizada usando um modelo de pull, disparado pelo banco de dados de mecanismo de pesquisa ou utilizando um modelo push, iniciado pelo código de aplicativo externo.

A pesquisa pode ser exata ou difusa. Uma pesquisa difusa localiza documentos que correspondem um conjunto de termos e calcula a forma como eles correspondem. Alguns mecanismos de pesquisa também fornecem suporte a análises linguísticas que podem retornar correspondências com base em sinônimos, expansões de gênero (por exemplo, correspondência dogs a pets), e lematização (palavras correspondentes com a mesma raiz).

Serviço do Azure

Carga de trabalho

  • Índices de dados de várias fontes e serviços.
  • Consultas são ad hoc e podem ser complexas.
  • Requer pesquisa de texto completo.
  • Requer consulta ad hoc de autoatendimento.

Tipo de dados

  • Dados semiestruturados ou não estruturados
  • Texto com referência a dados estruturados

Exemplos

  • Catálogos de produtos
  • Pesquisa de site
  • Log

Bancos de dados de séries temporais

Os dados de série temporal são um conjunto de valores organizados por tempo. Os bancos de dados de séries temporais geralmente coletam grandes quantidades de dados em tempo real de um grande número de fontes. As atualizações são raras e as exclusões geralmente são feitas como operações em massa. Embora os registros gravados em um banco de dados de série temporal sejam geralmente pequenos, muitas vezes, há um grande número de registros e o tamanho total dos dados pode aumentar de maneira rápida.

Serviço do Azure

Carga de trabalho

  • Os registros são geralmente anexados sequencialmente em ordem cronológica.
  • Um proporção predominante das operações (95% a 99%) é composta por gravações.
  • As atualizações são raras.
  • As exclusões ocorrem em massa e são realizadas em blocos ou registros contíguos.
  • Os dados são lidos em sequência em ordem cronológica crescente ou decrescente, geralmente em paralelo.

Tipo de dados

  • Um carimbo de data/hora é usado como a chave primária e o mecanismo de classificação.
  • Marcas podem definir informações adicionais sobre o tipo, a origem e outras informações sobre a entrada.

Exemplos

  • Monitoramento e telemetria de evento.
  • Sensor ou outros dados de IoT.

Armazenamento de objetos

O repositório de objetos é otimizado para armazenar e recuperar grandes objetos binários (imagens, arquivos, fluxos de áudio e vídeo, grandes documentos e objetos de dados de aplicativos, imagens de disco de máquina virtual). Arquivos de dados grandes também são bastante usados nesse modelo, por exemplo, arquivo delimitador (CSV), Parquet e ORC. Os armazenamentos de objetos podem gerenciar quantidades extremamente grandes de dados não estruturados.

Serviço do Azure

Carga de trabalho

  • Identificado pela chave.
  • O conteúdo normalmente é um ativo, como um arquivo delimitador, de imagem ou de vídeo.
  • O conteúdo precisa ser durável e externo a qualquer camada de aplicativo.

Tipo de dados

  • O tamanho dos dados é grande.
  • O valor é opaco.

Exemplos

  • Imagens, vídeos, documentos do office e PDFs
  • HTML estático, JSON, CSS
  • Arquivos de log e auditoria
  • Backups de banco de dados

Arquivos compartilhados

Algumas vezes, o uso de arquivos simples pode ser o meio mais eficaz para armazenar e recuperar informações. O uso de compartilhamentos de arquivos permite acessar arquivos em uma rede. Dado á segurança apropriada e mecanismos de controle de acesso simultâneo, o compartilhamento de dados dessa forma pode permitir serviços distribuídos para fornecer acesso de dados altamente escalonável para executar operações básicas de baixo nível, como solicitações de leitura e gravação simples.

Serviço do Azure

Carga de trabalho

  • Migração de aplicativos existentes que interagem com o sistema de arquivos.
  • Requer a interface SMB.

Tipo de dados

  • Arquivos em um conjunto hierárquico de pastas.
  • Acessível com bibliotecas de E/S padrão.

Exemplos

  • Arquivos herdados
  • O conteúdo compartilhado pode ser acessado por certo número de VMs ou instâncias de aplicativo

Com essa compreensão de diferentes modelos de armazenamento de dados, a próxima etapa é avaliar a carga de trabalho e o aplicativo, bem como decidir qual armazenamento de dados atenderá às suas necessidades específicas. Use a árvore de decisão do armazenamento de dados para ajudar nesse processo.