Na ciência da computação, dados (tratado como plural ou ) são qualquer sequência de um ou mais símbolos; dado (tratado como singular) é uma única unidade de dados. Dados requerem interpretação para se tornarem informação. Dados digitais são dados representados usando o sistema numérico binário de uns (1) e zeros (0), em vez da representação . Em sistemas computacionais modernos (pós-1960), todos os dados são digitais.
Os dados existem em três estados: , dados em trânsito e . Os dados dentro de um computador, na maioria dos casos, movem-se como dados paralelos. Os dados que se movem para ou de um computador, na maioria dos casos, movem-se como dados seriais. Os dados provenientes de um dispositivo analógico, como um sensor de temperatura, podem ser convertidos para o 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 , , 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 da memória do computador física consistem em um endereço e um byte/palavra de armazenamento de dados. Dados digitais são frequentemente 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 diversos tipos de estruturas de dados, incluindo matrizes, grafos e objetos. As estruturas de dados podem armazenar dados de diversos tipos, incluindo números, strings e até mesmo outras estruturas de dados.
Características Metadados ajudam a traduzir dados em informações. Metadados são dados sobre os dados. Metadados podem ser implícitos, especificados ou fornecidos.
Dados relacionados a eventos ou processos físicos terão um componente temporal. Este componente temporal pode ser implícito. Este é o caso quando um dispositivo, como um registrador de temperatura, recebe dados de um sensor de temperatura. Quando a temperatura é recebida, presume-se que os dados tenham uma referência temporal atual. Assim, o dispositivo registra a data, a hora e a temperatura em conjunto. Quando o registrador de dados comunica 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 lhes são fornecidas 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 que não são executados pela unidade central de processamento (CPU), também são considerados dados. Em sua essência, um dado único é 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 precisam ser serializados em um formato de arquivo. Normalmente, os programas são armazenados em tipos de arquivo especiais, diferentes daqueles usados para outros dados. Arquivos executáveis contêm programas; todos os outros arquivos também são . No entanto, arquivos executáveis também podem conter dados usados pelo programa, que são incorporados a ele. Em particular, alguns arquivos executáveis possuem um , que nominalmente contém constantes e valores iniciais para variáveis, ambos os quais podem ser considerados dados.
A linha entre programa e dados pode se tornar tênue. Um interpretador, por exemplo, é um programa. Os dados de entrada para um interpretador são, em si, um programa, mas não um programa 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, da mesma forma, envolve programas manipulando outros programas como dados. Programas como compiladores, linkers, depuradores, atualizadores de programas, antivírus e similares usam outros programas como seus dados.
Por exemplo, um usuário pode primeiro instruir o sistema operacional a carregar um programa de processamento de texto a partir de um arquivo e, em seguida, usar o programa em execução para abrir e editar um armazenado em outro arquivo. Neste exemplo, o documento seria considerado dado. Se o processador de texto também possuir um corretor ortográfico, o dicionário (lista de palavras) do corretor ortográfico também seria considerado dado. Os algoritmos usados pelo corretor ortográfico para sugerir correções seriam dados em código de máquina ou texto em alguma linguagem de programação interpretável.
Em um uso alternativo, arquivos binários (que não são legíveis por humanos) são às vezes chamados de dados, em oposição a textos legíveis por humanos.
A quantidade total de dados digitais em 2007 foi estimada em 281 bilhões de gigabytes (281 exabytes).
Chaves e valores, estruturas e persistência de dados As chaves nos dados fornecem o contexto para os valores. Independentemente da estrutura dos dados, sempre há um componente chave presente. As chaves de dados e as estruturas de dados são essenciais para atribuir significado aos valores dos dados. Sem uma chave que esteja direta ou indiretamente associada a um valor, ou a um conjunto de valores em uma estrutura, os valores tornam-se sem significado e deixam de ser dados. Ou seja, deve haver um componente chave vinculado a um componente valor para que este seja considerado um dado.
Os dados podem ser representados em computadores de diversas maneiras, conforme os exemplos a seguir:
RAM A memória de acesso aleatório (RAM) armazena dados aos quais a CPU tem acesso direto. Uma CPU só pode manipular dados dentro de seus registradores ou memória. Isso difere do armazenamento de dados, onde a CPU precisa direcionar a transferência de dados entre o dispositivo de armazenamento (disco, fita, etc.) e a memória. A RAM é uma matriz de posições lineares contíguas que um processador pode ler ou gravar, fornecendo um endereço para a operação. O processador pode operar em qualquer posição da memória a qualquer momento e em qualquer ordem. Na RAM, o menor elemento de dados é o bit binário. As capacidades e limitações de acesso à RAM são específicas do processador. Em geral, a memória principal é organizada como uma matriz de posições, começando no endereço 0 (hexadecimal 0). Cada posição 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 , abstratos e lógicos podem ser armazenados em associação com valores para formar uma estrutura de dados. As estruturas de dados possuem deslocamentos/offsets (ou links/ligações ou caminhos) predeterminados a partir do início da estrutura, nos quais os valores dos dados são armazenados. Portanto, a chave de dados consiste na chave da estrutura mais o deslocamento (ou links ou caminhos) para dentro da estrutura. Quando tal estrutura é repetida, armazenando variações dos valores dos dados e das chaves de dados dentro da mesma estrutura repetida, o resultado pode ser considerado semelhante a uma tabela, na qual cada elemento da estrutura repetida é considerado uma coluna e cada repetição da estrutura é considerada 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. Estruturas de dados repetidas podem ser organizadas hierarquicamente, de modo que os nós sejam interligados em uma cascata de relações pai-filho. Valores e estruturas de dados potencialmente mais complexas são vinculados aos nós. Assim, a hierarquia nodal fornece a chave para acessar as estruturas de dados associadas aos nós. Essa representação pode ser vista como uma árvore invertida. Os sistemas de arquivos dos sistemas operacionais de computador modernos são um exemplo comum; e o XML é outro.
Dados classificados ou ordenados Os dados apresentam algumas características inerentes quando . Todos os valores para subconjuntos da chave aparecem juntos. Ao percorrer sequencialmente grupos de dados com a mesma chave, ou quando um subconjunto da chave muda, isso é chamado, em processamento de dados, de quebra ou . Isso facilita particularmente a agregação de valores de dados em subconjuntos de uma chave.
Armazenamento periférico Até o advento da memória que não é volátil de grande capacidade, como a memória flash, o armazenamento persistente de dados era tradicionalmente realizado gravando os dados em dispositivos de bloco externos, como fitas magnéticas e discos rígidos. Esses dispositivos tipicamente buscam um endereço na mídia magnética e, em seguida, leem ou gravam blocos de dados de um tamanho predeterminado. Nesse caso, o endereço localizado na mídia é a chave de dados e os blocos são os valores dos dados. Os primeiros sistemas de arquivos ou sistemas operacionais de disco utilizavam dados brutos em disco, reservando blocos contíguos no disco rígido para . Nesses sistemas, os arquivos podiam ficar cheios, esgotando o espaço de dados antes que todos os dados fossem gravados neles. Assim, muito espaço de dados não utilizado era reservado improdutivamente para garantir espaço livre suficiente para cada arquivo. Sistemas de arquivos posteriores introduziram partições. Eles reservavam blocos de espaço de dados em disco para partições e utilizavam os blocos alocados de forma mais econômica, atribuindo dinamicamente blocos de uma partição a um arquivo conforme necessário. Para isso, o sistema de arquivos precisava controlar quais blocos estavam sendo usados ou não pelos arquivos de dados em um catálogo ou tabela de alocação de arquivos. Embora isso tenha otimizado o uso do espaço em disco, resultou na fragmentação dos arquivos e, consequentemente, em uma sobrecarga de desempenho devido ao tempo adicional de busca para leitura dos dados. Os sistemas de arquivos modernos reorganizam os arquivos fragmentados dinamicamente para otimizar os tempos de acesso. Desenvolvimentos posteriores 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 Acessar um pequeno subconjunto de dados de um conjunto muito maior pode implicar em buscas ineficientes e sequenciais pelos dados. Índices são uma forma de copiar chaves e endereços de localização de estruturas de dados em arquivos, tabelas e conjuntos de dados, organizando-os em estruturas de árvore invertida para reduzir o tempo necessário para acessar um subconjunto dos dados originais. Para isso, a chave do subconjunto de dados a ser acessado deve ser conhecida antes do início do acesso. Os índices mais populares são a árvore B e os métodos de indexação por chave hash dinâmica. A indexação representa uma sobrecarga para arquivar e acessar dados. Existem outras maneiras de organizar índices, como ordenar as chaves e usar um algoritmo de busca binária.
Abstração e indireção A programação orientada a objetos utiliza dois conceitos básicos para a compreensão de dados e software: A estrutura taxonômica de classes, que é um exemplo de estrutura de dados hierárquica; e em tempo de execução, a criação de referências a estruturas de dados em memória de objetos que foram instanciados a partir de uma biblioteca de classes.