AI解説
情報源: VLDB Journal 1995 論文本文(自己アーカイブ版 PDF、全73頁のサーベイ論文)を精読して記述。本文に書かれていない事項は書いていない。
一言で
長期間使われ、並行アクセスされ、大量のデータとプログラムからなるPersistent Application Systems(PAS)を作りやすくするための設計原則として、直交永続性(orthogonal persistence)を定義し、その理論的基盤と実装技術、成果と今後の研究課題を広くまとめたサーベイ論文。永続性独立・データ型の直交性・永続性の識別という3原則の組み合わせとして orthogonal persistence を定義する。
背景・問題
PAS の構築を委託する側は、妥当なコストで期日通りに作られ、要件や技術の変化に適応しながら長年信頼できるサービスを提供することを期待するが、実際にはこれよりずっと構築・保守が難しく、進化のたびに問題が起きることが多い。
論文はこれを、ある病院の医療記録管理システムの実例で説明する。医療記録の多くのフィールドが消失する事故が起き、現場のスタッフはデータベースの障害と診断してより古い状態へ復元したが、問題は解消せず、さらに古い状態へ復元してより多くの情報を失った。最終的にサプライヤが調査したところ、ユーザインタフェース管理システムが使うフォントを収めたファイルが失われていたことが原因だと分かった。もし全てのデータが同じ方法で復元されていれば、失われたファイルも復元されていたはずである。データの種類によって扱いが違っていたために、現場のスタッフにはシステムが理解不能なものになり、実装者も原因の特定に苦労した。この種の「データの種類ごとに永続化の扱いが違う」ことに起因する不整合が、論文が解決しようとする核心の問題である。
提案手法
直交永続性の3原則
論文は次の3つの原則の組み合わせから orthogonal persistence が導かれるとする。
- 永続性独立の原則(Principle of Persistence Independence):プログラムの形は、それが操作するデータの寿命に依存しない。短命なデータを操作しても長命なデータを操作しても、プログラムは同じ見た目になる。
- データ型の直交性の原則(Principle of Data Type Orthogonality):全てのデータオブジェクトは、その型にかかわらず、あらゆる範囲の永続性を許されるべきである。長命であることを許されない、あるいは短命であることを許されない特別扱いの対象はない。
- 永続性の識別の原則(Principle of Persistence Identification):永続オブジェクトをどう識別し提供するかという方法は、システムの言説領域(universe of discourse)とは直交する。永続オブジェクトを識別する仕組みは、型システムとは無関係である。
永続性独立は、プログラマを、ストレージ階層間のデータ移動を明示的にプログラムしたり、短期・長期表現間の変換をコーディングしたりする負担から解放する。移動そのものの機械的なコストは消えないが、知的なコストが消える。データ型の直交性は、データモデルが永続性から独立して完全であることを保証する。永続性の識別については、いくつかの手法が検討されてきたが、記憶域アロケータや変数名、宣言中の型に永続性を結び付ける方式は永続性独立の原則の下では許されない。
到達可能性による識別(identification by reachability)
永続性を識別する広く使われる技術は到達可能性による識別である。永続オブジェクトの識別は、1つまたは複数の永続ルートから(ポインタをたどって)到達可能な全オブジェクトの推移的閉包をシステムが自動的に計算することで行われる。ガベージコレクションとの類推は明らかである、と論文は述べる。
直交性の喪失とダングリング参照
上記3原則のいずれかを軽視すると直交性が失われる。最も深刻なのは永続性独立の違反であり、これが崩れるとシステムのどこが直交しているのか判別しづらくなる。到達可能性を使わない言語は、しばしば永続性を型に結び付ける。これは永続性の識別の原則に即座に違反し、副次的に他の2原則にも違反する。この方式は、永続オブジェクトが非永続オブジェクトを指す場合にダングリング参照(またはそれに準ずる無効化された参照)の問題を引き起こす。E 言語、C++ への永続化拡張の多く、PGraphite 言語がこの技術を使うとされる。

Figure 5: Persistent Objects before being sent to the Persistent Store。

Figure 6: The Same Objects as in Figure 5 in the Persistent Store。
Figure 5 はデータベース型のオブジェクトが、データベースに格納できる型の値2つと、データベース格納をサポートしない型の値1つへの参照を持つ様子を示す。Figure 6 はこの構造を永続ストアへ保存した結果を示し、非データベース値にあたる構造の一部が失われ、利用可能ならダングリング参照または nil 値に置き換わる。論文はこれを、永続ストアのデータモデルが主記憶のモデルと一致しない状態であり、プログラマがこれを習得する複雑さを増すため避けたい、と位置づける。回避するには、プログラマがデータベース型のみを使うサロゲート構造を定義し、非データベース値との間の変換コードを両方向書き、それを適切なタイミングで実行しつつ変換全体の一貫性を保証する必要がある。
直交永続性がもたらす節約
直交永続性の利点は、プログラミング生産性の向上、データ変換と長期記憶のための場当たり的な仕組みの回避、環境全体にわたる保護機構、段階的な進化のサポート、PAS の全生涯にわたる参照整合性の自動保持、として要約される。従来、プログラマはデータベースモデル・プログラミング言語モデル・実世界モデルという3つの対応関係を維持する必要があったが、永続システムではこれが1つに減る。マッピングを維持するためのコード量についても、典型的なデータベースアプリケーションの全コードの少なくとも30%を占めるという既存の見積もり(King, 1978)が引用されている。
外部世界との統合という限界
直交永続システムの安全性と単純さの多くは、型システムが定める言説領域や、到達可能性が定める意味の閉じたメタデータ・データ・プログラムの範囲といった閉じた世界を仮定することで達成されている。論文はこれらの完全に閉じた世界は、永続性への移行を考えるなら非現実的だと認める。実際、現状のほとんどの永続システムは外部世界との接続を持つ(例えば UNIX のファイルや UNIX のシェルコマンドを使える)。より洗練されたインタフェースが明らかに必要だと述べつつ、この方向の研究はまだ十分に投資されていない、と位置づけている。
関連研究との関係(メモ)
- Emacs の unexec/portable dumper、Smalltalk のイメージ:アプリケーションレベルのチェックポイント §3.5 で扱う言語処理系イメージ永続化の実装群は、いずれも到達可能性に基づくイメージ全体のダンプという点で、本論文が定式化した直交永続性の考え方の具体的な実装例として読める。ただし本論文自身がこれらの実装を論じているわけではない。
- ElasticNotebook(
li2023elasticnotebook):本論文が Figure 5・6 で論じる「型に基づく永続性がダングリング参照を生む」問題と、ElasticNotebook が扱う「シリアライズ不能なオブジェクトの扱い」は、対象こそ異なる(前者は言語設計上のデータ型、後者は実行時の外部リソース)が、いずれも「閉じた世界の外を指す参照をどう扱うか」という同型の問題に位置づけられる。
Q&A
(自分がAIに実際に質問したことだけをQ/A形式で残す。まだなし。)
自分のコメント
(ここは自分で都度書く欄。)