Compartilhar via


Entender os modelos de armazenamento de dados

Os sistemas de negócios modernos gerenciam volumes cada vez maiores de dados heterogêneos. Essa heterogeneidade significa que um único armazenamento de dados geralmente não é a melhor abordagem. Em vez disso, geralmente é melhor armazenar diferentes tipos de dados em diferentes armazenamentos de dados, cada um focado em uma carga de trabalho específica ou padrão de uso. O termo persistência poliglota é usado 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 compensações.

Selecionar o repositório de dados correto para seus requisitos é uma decisão de design chave. Há literalmente centenas de implementações para escolher entre bancos de dados SQL e NoSQL. Os armazenamentos de dados geralmente são categorizados pela forma como estruturam os dados e os tipos de operações que dão suporte. Este artigo descreve vários dos modelos de armazenamento mais comuns. Observe que uma tecnologia de armazenamento de dados específica pode dar suporte a vários modelos de armazenamento. Por exemplo, um RDBMS (sistemas de gerenciamento de banco de dados relacional) também pode dar suporte ao armazenamento de chave/valor ou grafo. 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 alto nível.

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 é incorporada ao mecanismo de armazenamento de dados. Em outros casos, os recursos de armazenamento e processamento de dados são separados e pode haver várias opções para processamento e análise. Os armazenamentos de dados também dão suporte a diferentes interfaces programáticas e de gerenciamento.

Em geral, você deve começar considerando qual modelo de armazenamento é mais adequado para seus requisitos. Em seguida, considere um armazenamento de dados específico dentro dessa categoria, com base em fatores como conjunto de recursos, custo e facilidade de gerenciamento.

Nota

Saiba mais sobre como identificar e examinar seus 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

Bancos de dados relacionais organizam dados como uma série de tabelas bidimensionais com linhas e colunas. A maioria dos fornecedores fornece um dialeto do SQL (Structured Query Language) para recuperar e gerenciar dados. Um RDBMS normalmente implementa um mecanismo transacionalmente consistente que está em conformidade com o modelo ACID (Atomic, Consistent, Isolated, Durable) para atualizar informações.

Um RDBMS normalmente dá suporte a um modelo de esquema em gravação, em que a estrutura de dados é definida com antecedência e todas as operações de leitura ou gravação devem usar o esquema.

Esse modelo é muito útil quando garantias de consistência fortes são importantes, em que todas as alterações são atômicas e as transações sempre deixam os dados em um estado consistente. No entanto, um RDBMS geralmente não pode escalar horizontalmente sem fragmentar os dados de alguma forma. Além disso, os dados em um RDBMS devem ser normalizados, o que não é apropriado para cada conjunto de dados.

Serviços do Azure

Carga

  • Os registros são frequentemente criados e atualizados.
  • Várias operações devem 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 a qualquer dado no banco de dados.
  • Os dados exigem alta integridade. Índices e relações precisam ser mantidos com precisão.
  • Os dados exigem 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 é pequeno a médio.

Exemplos

  • Gerenciamento de inventário
  • Gerenciamento de pedidos
  • Banco de dados de relatórios
  • Contabilidade

Armazenamentos de valor/chave

Um repositório de chave/valor associa cada valor de dados a uma chave exclusiva. A maioria dos repositórios de chave/valor dá suporte apenas a operações simples de consulta, inserção e exclusão. Para modificar um valor (parcial ou completamente), um aplicativo deve substituir os dados existentes para todo o valor. Na maioria das implementações, ler ou gravar um único valor é uma operação atômica.

Um aplicativo pode armazenar dados arbitrários como um conjunto de valores. Todas as informações de esquema devem ser fornecidas pelo aplicativo. O repositório de chave/valor simplesmente recupera ou armazena o valor por chave.

diagrama Diagrama de um repositório de chave-valor

Os repositórios de chave/valor são altamente otimizados para aplicativos que executam pesquisas simples, mas são menos adequados se você precisar consultar dados em diferentes repositórios de chave/valor. Os repositórios de chave/valor também não são otimizados para consulta por valor.

Um único repositório de chave/valor pode ser extremamente escalonável, pois o armazenamento de dados pode facilmente distribuir dados entre vários nós em computadores separados.

Serviços do Azure

Carga

  • Os dados são acessados usando uma única chave, como um dicionário.
  • Associações, bloqueios ou uniões não são necessários.
  • Nenhum mecanismo de agregação é usado.
  • Índices secundários geralmente não são usados.

Tipo de dados

  • Cada chave é associada a um único valor.
  • Não há imposição do esquema.
  • Nenhuma relação entre entidades.

Exemplos

  • Cache de dados
  • Gerenciamento de sessão
  • Preferência do usuário e gerenciamento de perfil
  • Recomendação do produto e serviç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 consiste em 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 única entidade, como um cliente ou um pedido. Um documento pode conter informações que seriam distribuídas 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 à medida que os requisitos de negócios são alterados.

diagrama de um repositório de documentos

Serviço do Azure

Carga

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

Tipo de dados

  • Os dados podem ser gerenciados de forma des normalizada.
  • O tamanho dos dados individuais do documento é relativamente pequeno.
  • Cada tipo de documento pode usar seu próprio esquema.
  • Os documentos podem incluir campos opcionais.
  • Os dados do 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 inventário

Bancos de dados do Graph

Um banco de dados de grafo armazena dois tipos de informações, nós e bordas. As bordas especificam os relacionamentos entre os nós. Nódulos e arestas podem ter propriedades que oferecem informações sobre aquele nódulo ou aresta, semelhantes às colunas em uma tabela. As bordas também podem ter uma direção que indica a natureza da relação.

Os bancos de dados do Graph podem executar consultas com eficiência na rede de nós e bordas e analisar as relações entre 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 arestas indicam relações hierárquicas e os departamentos nos quais os funcionários trabalham.

Diagrama de um banco de dados de documento

Essa estrutura torna simples executar consultas como "Localizar todos os funcionários que se reportam direta ou indiretamente a Sarah" ou "Quem trabalha no mesmo departamento que John?" Para grafos grandes com muitas entidades e relações, você pode executar análises muito complexas muito rapidamente. Muitos bancos de dados de grafo fornecem uma linguagem de consulta que você pode usar para percorrer uma rede de relações com eficiência.

Serviços do Azure

Carga

  • Relações complexas entre itens de dados envolvendo muitos saltos entre itens de dados relacionados.
  • A relação entre itens de dados é dinâmica e alterada ao longo 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.
  • Os nós são semelhantes a linhas de 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 compostos, como uma pessoa com vários números de telefone, tendem a ser divididos em nós separados e menores, combinados com relações percorríveis

Exemplos

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

Análise de dados

Os repositórios de análise de dados fornecem soluções massivamente paralelas para ingestão, armazenamento e análise de dados. Os dados são distribuídos entre vários servidores para maximizar a escalabilidade. Formatos de arquivo de dados grandes, como CSV (arquivos delimitadores), parquete 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

  • Análise de dados
  • BI da empresa

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.
  • Normalmente, é 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

  • Data warehouse corporativo

Bancos de dados de família de coluna

Um banco de dados da família de colunas organiza dados em linhas e colunas. Em sua forma mais simples, um banco de dados da família de colunas pode parecer muito semelhante a um banco de dados relacional, pelo menos conceitualmente. O poder real de um banco de dados da família de colunas está em sua abordagem desnormalizada para estruturar dados esparsos.

Você pode pensar em um banco de dados baseado em famílias de colunas como armazenando dados tabulares com linhas e colunas, mas as colunas são divididas em grupos conhecidos como famílias de colunas. Cada família de colunas contém um conjunto de colunas que estão logicamente relacionadas e normalmente 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 têm a mesma chave de linha em cada família de colunas. Essa estrutura, em que as linhas de um determinado objeto em uma família de colunas podem variar dinamicamente, é um benefício importante da abordagem da família de colunas, tornando essa forma de armazenamento de dados altamente adequada para armazenar dados estruturados e voláteis.

diagrama de um banco de dados da família de colunas

Ao contrário de um repositório de chave/valor ou um banco de dados de documento, a maioria dos bancos de dados da família de colunas armazena dados em ordem de chave, em vez de computando um hash. Muitas implementações permitem criar índices em colunas específicas em uma família de colunas. 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 única família de colunas, embora algumas implementações forneçam atomicidade em toda a linha, abrangendo várias famílias de colunas.

Serviços do Azure

Carga

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

Tipo de dados

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

Exemplos

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

Bancos de dados do Mecanismo de Pesquisa

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

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

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

Serviço do Azure

Carga

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

Tipo de dados

  • Texto semiestruturado ou não estruturado
  • Texto com referência a dados estruturados

Exemplos

  • Catálogos de produtos
  • Pesquisa no site
  • Logging

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érie temporal normalmente 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, geralmente há um grande número de registros e o tamanho total dos dados pode crescer rapidamente.

Serviço do Azure

Carga

  • Os registros geralmente são acrescentados sequencialmente em ordem de tempo.
  • 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 feitas em blocos ou registros contíguos.
  • Os dados são lidos sequencialmente em ordem de tempo crescente ou decrescente, muitas vezes 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 eventos.
  • Sensor ou outros dados de IoT.

Armazenamento de objetos

O armazenamento de objetos é otimizado para armazenar e recuperar grandes objetos binários (imagens, arquivos, fluxos de vídeo e áudio, documentos e objetos de dados de aplicativo grandes, imagens de disco de máquina virtual). Arquivos de dados grandes também são usados popularmente neste modelo, por exemplo, arquivo delimitado por vírgula (CSV), parquete ORC. Os repositórios de objetos podem gerenciar grandes quantidades de dados não estruturados.

Serviço do Azure

Carga

  • Identificado por chave.
  • Normalmente, o conteúdo é um ativo, como um delimitador, uma imagem ou um arquivo de vídeo.
  • O conteúdo deve 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, PDFs
  • HTML estático, JSON, CSS
  • Arquivos de log e auditoria
  • Backups de banco de dados

Arquivos compartilhados

Às vezes, usar arquivos simples simples pode ser o meio mais eficaz de armazenar e recuperar informações. O uso de compartilhamentos de arquivos permite que os arquivos sejam acessados em uma rede. Dada a segurança apropriada e os mecanismos de controle de acesso simultâneos, o compartilhamento de dados dessa maneira pode permitir que os serviços distribuídos forneçam acesso a dados altamente escalonável para executar operações básicas e de baixo nível, como solicitações simples de leitura e gravação.

Serviço do Azure

Carga

  • 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
  • Conteúdo compartilhado acessível entre várias VMs ou instâncias de aplicativo

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

Próximas etapas