數據 (電腦)

<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。在這樣的系統中，數據分布在多個電腦上，因此系統中的任何特定電腦必須直接或間接地表示在數據的關鍵字中。這使得能夠區分兩個相同的數據集，每個在同一時間在不同的電腦上進行處理。