# Dados (computação)

Na computação, dados (tratados como singular, plural ou como um substantivo de massa) são qualquer sequência de um ou mais símbolos. Datum é um único símbolo de dados. Os dados requerem interpretação para se tornarem informação. Dados digitais são dados que são representados usando o sistema numérico binário de uns (1) e zeros (0), em vez da representação analógica. Nos sistemas de computador modernos (pós-1960), todos os dados são digitais.
Os dados existem em três estados: dados em repouso, dados em trânsito e dados em uso. Os dados dentro de um computador, na maioria dos casos, são movidos como dados paralelos. Os dados que se movem de ou para um computador, na maioria dos casos, são movidos como dados seriais. Os dados provenientes de um dispositivo analógico, como um sensor de temperatura, podem ser convertidos em digital usando um conversor analógico-digital. Os dados que representam quantidades, caracteres ou símbolos nos quais as operações são realizadas por um computador são armazenados e gravados em mídia de gravação magnética, óptica, eletrônica ou mecânica e transmitidos na forma de sinais elétricos ou ópticos digitais. Os dados entram e saem dos computadores por meio de dispositivos periféricos.
Os elementos de memória física do computador consistem em um endereço e um byte/palavra de armazenamento de dados. Os dados digitais geralmente são armazenados em bancos de dados relacionais, como tabelas ou bancos de dados SQL, e geralmente podem ser representados como pares abstratos de chave/valor. Os dados podem ser organizados em muitos tipos diferentes de estruturas de dados, incluindo arranjos, grafos e objetos. As estruturas de dados podem armazenar dados de muitos tipos diferentes, incluindo números, strings e até mesmo outras estruturas de dados.

## Características

Os metadados ajudam a traduzir dados em informações, são dados sobre os dados e podem ser implícitos, especificados ou fornecidos.
Os dados relativos a eventos ou processos físicos terão um componente temporal. Este componente temporal pode estar implícito. Este é o caso quando um dispositivo como um registrador de temperatura recebe dados de um sensor de temperatura. Quando a temperatura é recebida se assume que os dados têm uma referência temporal do "agora". Assim, o dispositivo registra a data, a hora e a temperatura juntos. Quando o registrador de dados comunica as temperaturas, ele também deve relatar a data e a hora como metadados para cada leitura de temperatura.
Fundamentalmente, os computadores seguem uma sequência de instruções que são dadas na forma de dados. Um conjunto de instruções para executar uma determinada tarefa (ou tarefas) é chamado de programa. Um programa são dados na forma de instruções codificadas para controlar a operação de um computador ou outra máquina. No caso nominal, o programa, conforme executado pelo computador, consistirá em código de máquina. Os elementos de armazenamento manipulados pelo programa, mas não executados de fato pela unidade de processamento central (CPU), também são dados. Em sua forma mais essencial, um único dado é um valor armazenado em um local específico. Portanto, é possível que programas de computador operem em outros programas de computador, manipulando seus dados programáticos.
Para armazenar bytes de dados em um arquivo, eles devem ser serializados em um formato de arquivo. Normalmente, os programas são armazenados em tipos de arquivos especiais, diferentes daqueles usados para outros dados. Arquivos executáveis contêm programas; todos os outros arquivos também são arquivos de dados. No entanto, os arquivos executáveis também podem conter dados usados pelo programa que está embutido no programa. Em particular, alguns arquivos executáveis possuem um segmento de dados, que nominalmente contém constantes e valores iniciais para variáveis, sendo que ambos podem ser considerados dados.
A linha entre o programa e os dados pode ficar embaçada. Um interpretador, por exemplo, é um programa. Os dados de entrada para um interpretador são em si um programa, mas não um expresso em linguagem de máquina nativa. Em muitos casos, o programa interpretado será um arquivo de texto legível por humanos, que é manipulado com um programa editor de texto. A metaprogramação também envolve programas que manipulam outros programas como dados. Programas como compiladores, vinculadores, depuradores, atualizadores de programas, scanners de vírus e outros usam outros programas como seus dados.
Por exemplo, um usuário pode primeiro instruir o sistema operacional a carregar um programa processador de texto de um arquivo e, em seguida, usar o programa em execução para abrir e editar um documento armazenado em outro arquivo. Neste exemplo, o documento seria considerado dados. Se o processador de texto também tiver um corretor ortográfico, o dicionário (lista de palavras) para o corretor ortográfico também será considerado dados. Os algoritmos usados pelo corretor ortográfico para sugerir correções seriam dados de código de máquina ou texto em alguma linguagem de programação interpretável.
Em um uso alternativo, os arquivos binários (que não são legíveis por humanos) às vezes são chamados de dados, os distinguindo de texto legível por humanos.
A quantidade total de dados digitais em 2007 foi estimada em 281 bilhões de gigabytes (281 exabytes).

## Chaves e valores de dados, estruturas e persistência

As chaves nos dados fornecem o contexto para os valores. Independentemente da estrutura dos dados, há sempre um componente-chave presente. Chaves em dados e estruturas de dados são essenciais para dar significado aos valores de dados. Sem uma chave que esteja direta ou indiretamente associada a um valor, ou coleção de valores em uma estrutura, os valores perdem o sentido e deixam de ser dados. Ou seja, deve haver um componente-chave vinculado a um componente de valor para que seja considerado um dado.$^[$
Os dados podem ser representados em computadores de várias maneiras, conforme os exemplos a seguir:

### Memória de acesso aleatório (RAM)

* A memória de acesso aleatório (RAM) contém dados aos quais a unidade de processamento central (CPU) tem acesso direto. Uma unidade de processamento central (CPU) só pode manipular dados dentro de seus registradores de processador ou memória. Isso é diferente do armazenamento de dados, onde a unidade de processamento central (CPU) deve direcionar a transferência de dados entre o dispositivo de armazenamento (disco, fita...) e a memória. A memória de acesso aleatório (RAM) é um arranjo de locais contíguos lineares que um processador pode ler ou gravar fornecendo um endereço para a operação de leitura ou gravação. O processador pode operar em qualquer local da memória a qualquer momento e em qualquer ordem. Na memória de acesso aleatório (RAM), o menor elemento de dados é o bit binário. Os recursos e limitações de acesso à memória de acesso aleatório (RAM) são específicos do processador. Em geral, a memória principal é organizada como um arranjo de localizações começando no endereço 0 (hexadecimal 0). Cada local pode armazenar geralmente 8 ou 32 bits, dependendo da arquitetura do computador.

## Chaves

* As chaves de dados não precisam ser um endereço de hardware direto na memória. Códigos de chaves indiretas, abstratas e lógicas podem ser armazenados em associação com valores para formar uma estrutura de dados. As estruturas de dados têm deslocamentos predeterminados (ou links ou caminhos) desde o início da estrutura, na qual os valores de dados são armazenados. Portanto, a chave de dados consiste na chave da estrutura mais o deslocamento (ou links ou caminhos) na estrutura. Quando tal estrutura é repetida, armazenando variações dos valores de dados e as chaves de dados dentro da mesma estrutura de repetição, o resultado pode ser considerado como uma tabela, na qual cada elemento da estrutura de repetição é considerado uma coluna e cada repetição da estrutura é considerada como uma linha da tabela. Em tal organização de dados, a chave de dados geralmente é um valor em uma (ou uma composição dos valores em várias) das colunas.

### Estruturas de dados recorrentes organizadas

* A visualização tabular de estruturas de dados repetidas é apenas uma das muitas possibilidades. As estruturas de dados repetidas podem ser organizadas hierarquicamente, de modo que os nós sejam vinculados uns aos outros em uma cascata de relacionamentos pai-filho. Valores e estruturas de dados potencialmente mais complexas são vinculadas aos nós. Assim, a hierarquia nodal fornece a chave para endereçar as estruturas de dados associadas aos nós. Essa representação pode ser pensada como uma árvore invertida. Por exemplo, os sistemas de arquivos do sistema operacional de computador moderno são um exemplo comum; e a XML é outro.

### Dados classificados ou ordenados

* Os dados têm alguns recursos inerentes quando são classificados em uma chave. Todos os valores para subconjuntos da chave aparecem juntos. Ao passar sequencialmente por grupos de dados com a mesma chave, ou um subconjunto de alterações de chave, isso é referido nos círculos de processamento de dados como uma quebra ou uma quebra de controle. Isso facilita particularmente a agregação de valores de dados em subconjuntos de uma chave.

### Armazenamento periférico

Até o advento da memória não volátil em massa, como o flash, o armazenamento de dados persistente era tradicionalmente obtido gravando os dados em dispositivos de bloco externos, como fita magnética e unidades de disco. Esses dispositivos geralmente procuram um local na mídia magnética e, em seguida, lêem ou gravam blocos de dados de um tamanho predeterminado. Neste caso, o local de busca na mídia é a chave de dados e os blocos são os valores dos dados. Os primeiros sistemas de arquivos de dados de disco (bruto) ou sistemas operacionais de disco usados, ​ reservavam blocos contíguos na unidade de disco para arquivos de dados. Nesses sistemas, os arquivos podiam ser preenchidos, ficando sem espaço de dados antes que todos os dados fossem gravados neles. Assim, muito espaço de dados não utilizado foi reservado de forma improdutiva para garantir espaço livre adequado para cada arquivo. Sistemas de arquivos posteriores introduziram as partições. Eles reservaram blocos de espaço de dados em disco para partições e usaram os blocos alocados de forma mais econômica, atribuindo dinamicamente blocos de uma partição a um arquivo conforme necessário. Para conseguir isso, o sistema de arquivos teve que acompanhar quais blocos foram usados ​​ou não utilizados por arquivos de dados em um catálogo ou tabela de alocação de arquivos. Embora isso tenha feito melhor uso do espaço de dados do disco, resultou na fragmentação de arquivos no disco e uma sobrecarga de desempenho concomitante devido ao tempo de busca adicional para ler os dados. Os sistemas de arquivos modernos reorganizam arquivos fragmentados dinamicamente para otimizar os tempos de acesso aos arquivos. Outros desenvolvimentos em sistemas de arquivos resultaram na virtualização de unidades de disco, ou seja, onde uma unidade lógica pode ser definida como partições de várias unidades físicas.

### Dados indexados

Recuperar um pequeno subconjunto de dados de um conjunto muito maior implica pesquisar os dados sequencialmente. Isso é antieconômico. Os índices são uma maneira de copiar chaves e endereços de localização de estruturas de dados em arquivos, tabelas e conjuntos de dados e os organizar usando estruturas de árvore invertida para reduzir o tempo necessário para recuperar um subconjunto dos dados originais. Para fazer isso, a chave do subconjunto de dados a ser recuperado deve ser conhecida antes do início da recuperação. Os índices mais populares são o árvore B e os métodos de indexação de chave de hash dinâmico. A indexação é outra sobrecarga cara para arquivar e recuperar dados. Existem outras maneiras de organizar índices, por exemplo, ordenando as chaves ou a correção de quantidades (ou mesmo a chave e os dados juntos) e usando uma busca binária sobre elas.

### Abstração e indireção

* A orientação a objetos usa dois conceitos básicos para entender dados e software:
* A estrutura de classificação taxonômica de classes de código de programa, que é um exemplo de estrutura de dados hierárquica; e
* em tempo de execução, a criação de referências de chave de dados para estruturas de dados na memória de objetos que foram instanciados de uma biblioteca de classes.
Isso é somente após a instanciação que existe um objeto em execução de uma classe especificada. Depois que a referência de chave de um objeto é anulada, os dados referidos por esse objeto deixam de ser dados porque a referência de chave de dados é nula e, portanto, o objeto também deixa de existir. Os locais de memória onde os dados do objeto foram armazenados são então referidos como lixo e são reclassificados como memória não utilizada disponível para reutilização.

### Dados de banco de dados

* O advento dos bancos de dados introduziu uma camada de abstração adicional para armazenamento de dados persistentes. Os bancos de dados usam metadados e um protocolo de linguagem de consulta estruturada entre os sistemas cliente e servidor, se comunicando em uma rede, usando um sistema de registro de confirmação de duas fases para garantir a integridade transacional, ao persistir os dados.

### Processamento paralelo de dados distribuídos

* As tecnologias modernas de persistência de dados escaláveis / de alto desempenho dependem do processamento paralelo de dados distribuídos massivamente em muitos computadores comuns em uma rede de alta largura de banda. Um exemplo de uma é o Apache Hadoop. Nesses sistemas, os dados são distribuídos por vários computadores e, portanto, qualquer computador específico no sistema deve ser representado na chave dos dados, direta ou indiretamente. Isso permite a diferenciação entre dois conjuntos idênticos de dados, cada um sendo processado em um computador diferente ao mesmo tempo.