コンピュータサイエンスにおいて、永続性とは、システムの状態が、それを生成したプロセスよりも長く存続する(永続する)特性を指します。これは実際には、状態をコンピュータのデータストレージにデータとして保存することによって実現されます。プログラムはストレージデバイスとの間でデータを転送する必要があり、ネイティブプログラミング言語のデータ構造からストレージデバイスのデータ構造へのマッピングを提供する必要があります。 [ 1 ] [ 2 ]
例えば、画像編集プログラムやワープロソフトは、文書をファイルに保存することで状態の永続性を実現しています。
永続性は、プログラムの実行環境の固有の特性として実装されている場合、「直交的」または「透過的」であると言われます。直交的な永続性環境では、その環境で実行されているプログラムが状態を取得または保存するために特別な操作を行う必要はありません。
非直交永続化では、プログラム内の特定の命令を使用してストレージにデータを書き込み、ストレージからデータを読み取る必要があるため、persistは他動詞として使用されます。プログラムが完了すると、データは永続化されます。
直交型永続化環境の利点は、プログラムがよりシンプルでエラーが発生しにくいことである。
「persistent」という用語は、アトキンソンとモリソン[ 1 ]によって直交的持続性の意味で初めて導入されました。彼らは、プログラムによって実行される命令的な動作とは区別される、データの特性としての持続性を強調するために、動詞ではなく形容詞を使用しました。他動詞「persist」(プログラムによって実行される動作を記述する)の使用は、逆成です。
直交永続性は、オペレーティングシステムにおける休止状態や、 VMwareやVirtualBoxなどのプラットフォーム仮想化システムにおける状態保存のために広く採用されている。
PS-algol、Napier88 、Fibonacci、pJamaなどの研究プロトタイプ言語は、プログラマーにとっての利点とともに、その概念をうまく実証した。
システムイメージを使用する方法は、最もシンプルな永続化戦略です。ノートブックの休止状態は、システムイメージを使用した直交型永続化の一例です。なぜなら、マシン上で実行されているプログラムによる操作を必要としないからです。システムイメージを使用した非直交型永続化の例としては、ドキュメント全体をファイルに保存するための特定の命令を実行するシンプルなテキスト編集プログラムが挙げられます。
欠点:システム全体の状態を保持するのに十分なRAM容量が必要です。システムの最後のイメージが保存された後に行われた状態変更は、システム障害やシャットダウンが発生した場合に失われます。変更ごとにイメージを保存するのはほとんどのシステムにとって時間がかかりすぎるため、重要なシステムではイメージは唯一の永続化手法としては使用されません。
ジャーナルを使用する方法は、2番目にシンプルな永続化手法です。ジャーナリングとは、各イベントをシステムに適用する前にログに保存するプロセスです。このようなログはジャーナルと呼ばれます。
起動時にジャーナルが読み込まれ、各イベントがシステムに再適用されるため、システム障害やシャットダウンが発生した場合でもデータ損失を防ぐことができます。
例えば、画像編集プログラムにおけるユーザーコマンドの「元に戻す/やり直し」履歴全体をファイルに書き込むと、編集された画像の任意の時点の状態を復元できるジャーナルが構成されます。
ジャーナルは、ジャーナリングファイルシステム、一般的なシステム、およびデータベース管理システムで使用され、これらのシステムでは「トランザクションログ」または「リドゥログ」とも呼ばれます。
欠点:ジャーナルのみを使用する場合、システム起動のたびに、システムイベントの履歴全体(場合によっては膨大な量になる)を再適用する必要があります。そのため、ジャーナルは他の永続化技術と組み合わせて使用されることがよくあります。
この手法は、前回の書き込み以降に変更された(ダーティな)システム状態の部分のみをストレージに書き込むものです。例えば、高度な文書編集アプリケーションでは、ダーティ書き込みを利用して、前回の保存以降に実際に変更された文書の部分のみを保存します。
欠点:この手法では、プログラム内で状態変化を傍受する必要があります。これは、特定のストレージAPI呼び出しを必要とする非透過的な方法、または自動的なプログラム変換による透過的な方法で実現されます。結果として、ネイティブコードよりも処理速度が遅く、デバッグがより複雑になります。
プログラムが状態を永続化しやすくするソフトウェア層は、総称して永続化層と呼ばれます。ほとんどの永続化層は、直接永続化を実現するのではなく、基盤となるデータベース管理システムを利用します。
システム普及率とは、前述のシステムイメージとトランザクションジャーナルを組み合わせることで、それらの限界を克服する手法である。
欠点:普及しているシステムは、システム全体の状態を保持するのに十分なRAMを備えている必要がある。
DBMSは、上述のダーティライトとトランザクションジャーナリングの手法を組み合わせて使用します。永続性を提供するだけでなく、クエリ、監査、アクセス制御などの他のサービスも提供します。
永続型オペレーティングシステムとは、クラッシュや予期せぬシャットダウン後も動作し続けるオペレーティングシステムのことです。この機能を採用しているオペレーティングシステムには以下のようなものがあります。