オブジェクトバージョニング(記憶を辿る)
Googleが携帯OSをオープンプラットフォームで開発することを表明したことで話題は持ちきりなようだが、どうも標準化ありき、みたいな発想でスタートするものに私は興味が無く、空虚な国連型オレンジジュースでも飲みながらやりましょう議論に聞こえる。OSGiのような業界をまたぐ標準化には、ようやくその意義を体で理解したところだが・・・。
それで、大船の波にひっくり返されないように私の小船は何をしているかというと、オブジェクトバージョニングについて。もともとの発想はグラフの視覚化プロジェクトで、アルゴリズムの計算過程を一時停止とか巻き戻しできるもの。それを実現するにはGUIとオブジェクトバージョニングに大きな課題がある。GUIの方はJava Advanced Imaging(BSDライセンス)を使えば大丈夫そうだが、オブジェクトバージョニングはちょっと厄介だ。
私のメインテーマになりつつある、脳のようなデータベースとオーバーラップさせて考えると、脳は更新や削除といった操作を行わずに、時間軸を含んだ4次元のデータを持っているわけで、オブジェクトのバージョニングという発想は、現在2次元のフラットな情報しかないデータベース内に、時間という3次元目の要素を追加することになる。それってログ?という感じだが、むしろCVSやSVNのタグにあるようなスナップショットに近いだろう。実際に我々の頭の中は過去のデータも頻繁に使って必要な情報を取り出している。思い出、がいかに重要かを考えれば分かり易い。
ということで、具体的なやり方は:
- あるバージョンを指定して、その中からオブジェクトを取り出し、グラフをたどる
- あるオブジェクトを取り出して、いくつかのバージョンをたどり、その中のグラフへ
という感じだ。
バージョンには2つの意味がある:
- オブジェクトの構造
- オブジェクトのデータ
構造についてはユーザーにとっては透過的で、自動的に処理されているのが望ましい。この場合、Javaを使うとなると、同一のクラスが複数のバージョンを持つには、多少厄介な問題がある。これについては、db4o自身が持つGenericClassやGenericObjectといった抽象化されたクラスとオブジェクトを使えるだろう。
少し長くなったが、オブジェクトバージョニングで実現したいのは、ある瞬間の都市を再現できる、そんなようなものだ。