永続性

計算機科学における永続性（）は、データを生成したプログラムが終了してもそのデータが存続する特性を指す。この特性がない場合、データはメモリ上にのみ存在し、コンピュータのシャットダウン時など、メモリの電源が切られた時点で消失する。

プログラミング 
プログラミングにおいて、永続性とはデータ構造をプログラムの実行と実行の間で保持することを指す。例えば、画像編集における複雑な選択の保持やワードプロセッサにおけるUNDOヒストリの保持などである。

これはデータを不揮発性の記憶装置、すなわちファイルシステムや関係データベースやオブジェクトデータベースに格納することでなされる。これに関係したデザインパターンとして、container based persistence、component based persistence、Data Access Objectモデルなどがある。当初、永続性という用語が登場したころ、データはプログラミング言語の命令によってディスクから読み書きされるものであったため、永続性はデータの本質的特性であると見なされた。しかし、その後メモリ容量の増大や動的にデータ構造を生成するオブジェクト指向プログラミングの登場によって、そのような見方は変化していった。永続性の例としては、Javaのオブジェクトをディスクに格納するためのシリアライズ、Jakarta EEによる関係データベースへのEnterprise JavaBeansの格納がある。

オペレーティングシステムとプログラミング言語での組み込み 
直交永続性（）とは、一部のプログラミング言語やオペレーティングシステム (OS) の持つ固有の特徴である。直交永続性のある言語で書かれたプログラムや直交永続性のあるOSは、プラットフォームが不意にシャットダウンされたり、クラッシュした場合でも永続性を保つことができる。すなわち、システムを立ち上げ直すとそのまま中断した時点から処理が続行される。

直交永続性のあるオペレーティングシステム:
 
  - KeyKOSの後継
 Coyotos - EROSの改良
  - EROSの改良
 Multicsとその単一レベル記憶

直交永続性のあるプログラミング言語:
 PS-Algol
 SmalltalkとLISP - システムイメージを使用

なお、データベースにおける同様の特性も「永続性」と呼ぶが、英語ではDurabilityである（ACID参照）。

ユーザインタフェース 
ソフトウェアをデータを処理するものと捉えた場合、データ処理の観点での完全性を実現するのに最低限必要な機能を「永続性」と呼ぶことがある。この場合、永続性のある操作はソフトウェアが格納するデータに対する操作として以下のように分類される。

 新たなデータエントリを追加（生成）する機能
 既存のデータエントリを参照する機能
 既存のデータエントリを編集（更新）する機能
 既存のデータエントリを削除する機能

これはつまり、生成したデータを単にディスクなどに格納したら永続性があるとは言えず、後でそれを再利用できて初めて永続性があると言えるのだ、ということを意味している。さらに、これらに加えて大量のデータエントリを扱う場合には、次のような機能も「永続性」の要件とされることがある。

 エントリを検索する機能
 エントリをソートする機能
 エントリをフィルタリングする機能

記憶装置 
永続性記憶装置（persistent storage）とは、電源が切れてもデータを保持できる機器を指す。そのような機器は一般に広義の不揮発性メモリ機器と呼ばれる。例えば、ハードディスクドライブ、フロッピーディスク、コンパクトディスクなどが含まれる。

Random Access Memory (RAM) のように電源を供給していないとデータを保持できない機器は「揮発性メモリ」機器と呼ばれ、永続性はない。

初期の携帯情報端末 (PDA) では、全てのデータは RAM に格納されていた。従って、バッテリーの電力が切れるとデータも失われた。最近のPDAは永続性記憶装置を備えており、そのようなユーザデータの消失は発生しないようになっている。

関連項目 
 CRUD
 Hibernate
 Java Persistence API (JPA)
 直交性
 永続データ構造
 Service Data Objects

外部リンク 
 KeyKOS
 EROS
 Coyotos
 CapROS

プログラミング