けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :05092 ] the message: "[ruby-list:5092] Re: RubyでOODB
", on Oct/22 12:18(JST) matz / netlab.co.jp (Yukihiro Matsumoto) writes:

>まつもと ゆきひろです

>|# get_root/set_rootは何か他のものを思い出すので, db[root_name]が良いの
>|# ではないかなと思いますが.
>
>そうなんですか?

とにかく, こっちの方が気持ちが良いでしょ?

>|そうすると機能的には:
>|
>|1. データベースのオープン/クローズ/削除
>|2. トランザクション(begin/commit/abort)
>|3. データベースのルートの設定/参照
>|4. パーシステントなオブジェクトの外延を永続化(セーブ)する機能
>|
>|ぐらいですか...
>
>1は不要なような気がするのですが.というのもデータベースは所
>詮ファイルですから,削除などの操作はFileクラスのメソッドで実
>現できると思いますし.あって行けないわけではないですが.

確かに, 削除はいらないかな.

>また,オープンとクローズは上記のインターフェースを採用するな
>らトランザクション開始時と終了時に自動的に行われるのではない
>かと思います.


        db = PStore.new(filename)
        db.transaction do
          db.set_root("root", obj)
          # .. objに対する操作
        end

の中の, PStore.newのイメージでした. それに, DBMだってあるんだからいい
んじゃないでしょうか?

現時点ではオープン/クローズが自動的に行われるか分かりませんよね. コミッ
ト時に書き込まれることは確かだと思いますが.

あと, 気になっているのは, marshalは全ファイルを読み書きしますよね. こ
のアーキテクチャだとコミット時に全データベースを書き込むことになって, 
かなり効率が悪そうなんですが...

>ところで「外延」ってなに?

すいません. 永続と指定された(rootになったオブジェクト)からインスタンス
変数でたどれるオブジェクトの集合です.

>|あれ? marshal用にメソッドが用意されていませんでした? ファイルセーブを
>|独自に定義したいような時用の...
>
>ええ,でもそれでも問題はあります.
>
>  * ビルトインクラスのインスタンスはこのメソッドを使えない.
>  * このメソッドを定義してしまうとPSEだけでなくmarshal全てに
>    影響してしまう.
>  * IO(Socket)やThreadなど本質的にプロセスを越えられないデー
>    タをどうやって扱うかはいずれにしても問題.
>
>もうちょっと考えないといけないでしょうね.

なるほど...

# でも, 最後のまで永続化できるとすごいかも知れない... 

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---