数据 (计算机)

<image>

数据（data）为计算机科学中的符号序列，在解释后能成为信息。要将数据转换为信息，必须考虑的几个已知因素。所涉及的因素由数据的创建者和所需信息决定。元数据用于引用有关数据的数据。元数据可以间接、指定或给定。与物理事件或过程相关的数据也将具有时间数据。在几乎所有情况下，这个时间分量是隐含的。当温度记录器等设备从温度传感器接收数据时就是这种情况。当接收到温度时，假设数据具有“现在”的时间参考。所以设备一起记录日期，时间和温度。

数字数据是使用（1）和零（0）的二进制数系统表示的数据，而不是模拟表示。在现代（1960年后）计算机系统中，所有的数据都是数字的。在大多数情况下，计算机中的数据作为并行数据移动。在大多数情况下移动到或来自计算机的数据作为串行数据移动。请参见并行通信和串行通信。来自模拟设备（例如温度传感器）的数据必须通过“模数转换器”或“ADC”（请参见类比数位转换器）将模拟数据转换为数字数据。

表示数据的数量，字符，或在其上的操作由执行符号计算机被存储并记录在硬盘（磁、光盘或机械的记录介质），和传输在数字电信号的形式。

程序是一组数据，由一系列编码软件指令组成，用于控制计算机或其他机器的操作。物理计算机存储元件由一个地址和一个字节/字的数据存储组成。数字数据通常存储在有关联数据库中，如表或数据库，通常可以表示为 关键字/值

数据可以组织在许多不同类型的数据结构中，包括数组、图形和对象。数据结构可以存储许多不同类型的数据，包括数字，字符串甚至其他数据结构。数据通过I/O设备进出计算机。

在另一种使用方法，二进制文件（不是人类可读的）有时被称为与人类可读的“文本”不同的“数据”。2007年数字数据总量估计为2810亿千兆字节（= 281亿字节）。这数据来自三个状态：静止数据，传输中的数据和正在使用的数据。

## 特征

在特殊的情况下，单个数据是存储在特定位置的值。

从根本上说，计算机遵循一系列以数据形式给出的指令。执行给定任务（或多个任务）的一组指令称为“程序”。在名义情况下，由计算机执行的程序将由二进制机器代码组成。由程序操纵但不是由CPU实际执行的存储元素也是数据。程序指令和程序操作的数据都以完全相同的方式存储。因此，计算机程序可以通过操纵其程序化数据来操作其他计算机程序。

程序和数据之间的界限会变得模糊。一个解释器，例如，是一个程序。解释器的输入数据本身就是一个程序，只是不是以本地机器语言表示的。在许多情况下，解释的程序将是一个人类可读的文本文件，它由文本编辑器程序（通常与纯文本数据相关联）进行操作。元编程类似地涉及将其他程序操作为数据的程序。如编译器，链接器，调试器，程序更新程序，病毒扫描程序等程序使用其他程序作为其数据。

要将数据字节存储在文件中，必须以“文件格式”序列化。通常，程序存储在与其他数据不同的特殊文件类型中。可执行文件包含程序；所有其他文件也是数据文件。然而，可执行文件也可能包含内置于程序中的“在线”数据。特别地，一些可执行文件具有数据段，其名义上包含常数和初始值（两个数据）。

例如：用户可能会首先指示操作系统从一个文件加载文字处理程序，然后使用文字处理程序编辑存储在另一个文件中的文档。在此示例中，该文档将被视为数据。如果字处理器还具有拼写检查器，则拼写检查器的字典（单词列表）也将被视为数据。该算法使用的拼写检查建议更正是，要么机器代码的一些解释的数据或文本编程语言。

## 主键和数值，结构和续写性

数据中的键提供值的上下文。无论数据的结构如何，总是存在一个关键组件。数据和数据结构中的数据键对于给数据值赋予意义至关重要。没有一个直接或间接与一个值结合的关键字，或者一个结构中的值的集合，这些值就变得毫无意义，不再是数据。也就是说，必须至少有一个与值组件相关联的关键组件，以便将其视为数据。数据可以以多种方式在计算机中表示，具体如下：

### 随机存储

- 随机访问存储器保存计算机处理器可以直接访问的数据。计算机处理器（CPU）可能仅操纵其内部的数据（处理器寄存器）或存储器。这与数据存储相反，处理器必须在存储设备（磁盘，磁带...）和存储器之间移动数据。RAM是线性连续位置的一个或多个块的阵列，处理器可以通过提供用于读取或写入操作的地址来读取或写入。RAM的“随机”部分意味着处理器可以在任何时间以任何顺序在存储器中的任何位置上操作。（另见内存管理单元）。在RAM中，数据的最小元素是“二进制位”。访问RAM的功能和限制是处理器特定的。通常主存储器或RAM设置为“集的阵列的电子开/关开关”或位置在地址0（开始十六进制0）。根据处理器（CPU）架构，每个位置通常可以存储8,16,32或64个并行位。因此，存储在RAM中的字节中的任何值具有表示为与存储器阵列中的第一存储器位置的偏移的匹配位置，即0 + n，其中n是存储器位置阵列中的偏移量。

### 主键

- 数据主键不需要是内存中的直接硬件地址。间接，抽象和逻辑密钥代码可以与值相关联地存储以形成数据结构。数据结构具有从其中存储数据值的结构开始的预定偏移（或链接或路径）。因此，数据密钥由结构的键加上结构中的偏移（或链接或路径）组成。当重复这样的结构时，将数据值和数据键的变化存储在相同的重复结构中，结果可以被认为类似于表，其中重复结构的每个元素被认为是一列，结构的每个重复被认为是表的一行。

### 有规律的数据结构

- 重复数据结构的表格视图只是许多可能性之一。重复数据结构可以分层次地组织，使得节点在父子关系的级联中彼此链接。值和潜在的更复杂的数据结构链接到节点。因此，节点层次结构提供了用于寻址与节点相关联的数据结构的关键。这种表示可以被认为是倒置的树。例如现代计算机操作系统文件系统是一个常见的例子；而XML是另一个。

### 按主键分类数据

- 当数据按主键排序时，数据具有一些固有的特征。主键的子集的所有值都显示在一起。当通过具有相同密钥的数据组顺序通过或者主键的子集改变时，这在数据处理圆中被称为中断或控制中断。它特别有助于数据值在密钥子集上的聚合。

### 外围存储

- 直到非易失性计算机存储器如USB记忆棒的出现，传统上通过将数据写入诸如磁带和磁盘驱动器的外部块设备来实现持久数据存储。这些设备通常寻求磁介质上的位置，然后读取或写入预定大小的数据块。在这种情况下，媒体上的查找位置是数据键，块是数据值。早期的数据文件系统或用于在数据文件的磁盘驱动器上预留连续块的光盘操作系统。在这些系统中，文件可能会被填满，在所有数据都已写入数据空间之前已经用尽。因此，未生产过多的未使用的数据空间被保留，以避免产生这种情况。这被称为原始磁盘。后来的文件系统引入了分区。它们为分区保留了磁盘数据空间块，并且更经济地使用了分配的块，通过根据需要动态地将分区的块分配给文件。为了实现这一点，文件系统必须跟踪目录或文件分配表中的数据文件使用或未使用的块。虽然这更好地利用了磁盘数据空间，但是它导致了磁盘上文件的碎片化，以及由于延迟引起的伴随的性能开销。现代文件系统动态重组碎片文件以优化文件访问时间。

### 索引数据

- 从更大的集合中检索一小部分数据意味着依次搜索数据。这是不经济的。索引是从文件，表和数据集中的数据结构中复制密钥和位置地址的方法，然后使用反向树结构来组织它们，以减少检索原始数据子集所需的时间。为了做到这一点，在检索开始之前必须知道要检索的数据子集的关键字。最流行的索引是B树和动态散列密钥索引方法。索引是归档和检索数据的另一个昂贵的开销。还有其他方式组织索引，例如排序密钥或纠正数量（甚至密钥和数据在一起）。

### 抽象和简介

- 对象方向使用两个基本概念来理解数据和软件：1）程序代码类的分类秩序结构，这是分层数据结构的一个例子；和2）在运行时，创建对已经从类库实例化的对象的内存中数据结构的数据键引用。只有在实例化之后，存在指定类的执行对象。在对象的密钥引用无效后，该对象引用的数据不再是数据，因为数据密钥引用为空；因此物体也不再存在。存储对象的数据的存储单元然后称为垃圾，并重新分类为可用于重用的未使用的内存。

### 数据库数据

- 数据库的出现为持久性数据存储引入了更多的抽象层。在持久化数据时，数据库使用元数据和客户端和服务器系统之间的结构化查询语言协议，通过网络进行通信，使用两阶段提交日志记录系统来确保事务完整性。

### 并行分布式数据处理

- 现代可扩展/高性能数据持久性技术依赖于高带宽网络上的许多商用计算机的大规模并行分布式数据处理。一个例子是Apache Hadoop。在这样的系统中，数据分布在多个计算机上，因此系统中的任何特定计算机必须直接或间接地表示在数据的关键字中。这使得能够区分两个相同的数据集，每个在同一时间在不同的计算机上进行处理。