データとは
コンピューティングにおける
データは、一つ以上の記号(文字、数字、記号など)の並びとして定義されます。単一の記号は
データムと呼ばれます。データは、それ自体では意味を持たず、解釈されて初めて
情報となります。
デジタルデータは、アナログ表現とは異なり、1と0の二進数で表現されます。現代の
コンピューターシステムでは、すべてのデータは
デジタル形式で扱われます。
データの状態
データは、以下の3つの状態で存在します。
保存中: ハードディスクやSSDなどのストレージデバイスに格納されている状態
転送中: ネットワークを介して別の
コンピューターやデバイスに送信されている状態
使用中: プログラムが実行され、データを処理している状態
コンピューター内部では、データは並列に移動することが多く、
コンピューターとのデータのやり取りは直列で行われることが一般的です。温度
センサーなどのアナログ機器から送られるデータは、アナログ-
デジタル変換器(ADC)によって
デジタルデータに変換されます。
データの表現と格納
コンピューターが操作する
量、文字、記号などは、磁気、光学、電気、機械的な
記録媒体に保存され、
デジタル信号として伝送されます。データは、キーと値の組み合わせとして表され、テーブルやリレーショナル
データベース(
SQLデータベースなど)に格納されることがあります。また、
配列、グラフ、オブジェクトなど、さまざまな
データ構造で整理できます。これらの
データ構造には、数値、
文字列、別の
データ構造など、さまざまな種類のデータを格納できます。
メタデータは、データに関するデータであり、データに意味を与えて
情報に変換するのに役立ちます。
メタデータは、暗黙的に存在する場合もあれば、明示的に指定されたり、付与されたりする場合もあります。
時間的な要素を持つデータの場合、
メタデータとしてタイムスタンプが付与されることがあります。例えば、温度ロガーが温度
センサーからデータを受信した場合、そのデータには測定された時刻が含まれる必要があります。
コンピューターは、データとして与えられた命令に従って動作します。一連の命令をプログラムと呼び、プログラムは
コンピューターの動作を制御するためのコード化された命令の形をとります。プログラムは、
機械語コードで構成され、中央処理装置(
CPU)によって実行されます。プログラムによって操作されるデータは、
CPUによって直接実行されるわけではありませんが、
コンピューターにとって不可欠な要素です。
ファイルにデータを保存する際には、ファイル形式に従って直列化する必要があります。プログラムは、特別なファイル形式で保存されることが多く、実行可能ファイルにはプログラムが含まれます。データファイルには、プログラムが使用するデータが含まれます。
プログラムとデータの境界は、時として曖昧になることがあります。例えば、
インタプリタはプログラムですが、
インタプリタへの入力データは、別のプログラムとして解釈されることがあります。また、
メタプログラミングでは、プログラムが他のプログラムをデータとして操作することもあります。
データのキーと値、構造、永続性
データの
キーは、
値の文脈を提供し、データに意味を与えるために不可欠です。キーがない場合、値は意味をなさず、データとして認識されません。データは、ランダムアクセスメモリ(RAM)やストレージデバイスなど、さまざまな場所に保存されます。RAMは、
CPUが直接アクセスできる高速なメモリであり、
CPUはレジスタやメモリ内のデータのみを操作できます。
キーは、メモリ上の物理アドレスである必要はありません。抽象的なキーや論理的なキーを値に関連付けて格納し、
データ構造を形成できます。
データ構造は、データの先頭からのオフセットやリンク、パスなどの
情報を使って、値の場所を特定します。
データは、さまざまな構造で整理できます。
表形式: データは、行と列からなる表形式で表現できます。各行はレコードを表し、各列はデータの属性を表します。
階層構造: データは、ノードとリンクからなる階層構造で表現できます。各ノードはデータを表し、リンクはノード間の親子関係を表します。
ファイルシステムやXMLなどがこの構造の例です。
ソートされたデータ: データを特定のキーで
ソートすると、同じキーを持つデータがまとまって現れます。これにより、データの集計や分析が容易になります。
ストレージ
データは、永続的なストレージデバイスに保存されることがあります。磁気テープやディスクドライブなどのブロックデバイスは、データのブロックを読み書きするために使用されます。ディスク上の位置はデータキーとして機能し、ブロックがデータ値となります。初期の
ファイルシステムでは、連続したブロックをファイルに割り当てていましたが、断片化が発生し、パフォーマンスが低下する可能性がありました。後期の
ファイルシステムでは、
パーティションを使用して、ディスク領域をより効率的に管理するようになりました。
インデックス
大きな
データセットから特定のデータを効率的に検索するために、インデックスが使用されます。インデックスは、キーと位置アドレスを写し取り、反転木構造で整理することで、検索時間を短縮します。
抽象化と間接化
オブジェクト指向プログラミングでは、データとソフトウェアを理解するために、以下の2つの基本的な概念を使用します。
クラスの階層構造
オブジェクトのメモリ内
データ構造へのキー参照
オブジェクトは、
インスタンス化された後に初めてメモリに現れ、オブジェクトのキー参照がNullになると、そのオブジェクトが参照しているデータはデータではなくなり、そのオブジェクトも存在しなくなります。
データベースは、永続的な
データ保存のための抽象化レイヤーを提供します。
データベースは、
メタデータと構造化問い合わせ言語(
SQL)を使用してデータを管理し、ネットワークを介してクライアントとサーバー間で通信します。
並列分散データ処理
最新のデータ処理技術では、複数の
コンピュータに分散されたデータを並列処理します。これにより、大規模な
データセットを効率的に処理できます。
Apache Hadoopなどのフレームワークがこの技術を使用しています。
その他
* 2007年の時点で、
デジタルデータの総
量は281
エクサバイトと推定されています。
データは、
コンピューターシステムの中核をなす重要な要素であり、さまざまな形態で存在し、さまざまな方法で処理および管理されます。