From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2001-05-07T23:18:25+09:00 Subject: [ruby-list:29578] Re: [ruby-ext:01642] Re: o_dbm けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :29468 ] the message: "[ruby-list:29468] Re: [ruby-ext:01642] Re: o_dbm ", on May/01 11:05(JST) akira yamada / やまだ あきら writes: >>> この「微妙な問題」というのはどういうものですか? > >石> メモリ中のオブジェクトとデータベースから持ってきたオブジェクトが実際には >石> 同じじゃないってことかしら... > >なるほど. 注意が必要ですね. ですね. あくまでもo_``dbm''であって, oodbではありません >>>>> あと require "dbm" ですが gdbm でも動作するようなので >>>>> どっちかえらべるとうれしいかもしれないと思うのですがどうでしょうか. > >bdbをうまく使ってやるとロックとかうまく扱えそうな感じがしますね. これってどういう意味ですか? ファイル全体をロックする? それとも, キーごと にロックする? >というか, なんとかEX/SHロックをかけられるようにならないかと >いろいろ—ロックファイルを使って…とかもやってみたんですが, >結局DBM/GDBMでは難しいなあというところで落ち着きました. ># BDB_Adapterを作って, それならロックもいけるよ ># というのに挑戦するのがまっとうかなあ, と. BDBってRAAにあるbdbですか? これはこれ自身でtransactionとか持っているみた いですね. もうちょっと, rawレベルなlibdbのインターフェイスだったらよかっ たのに... >ただ, その過程でいくつかbugらしきものを見付けたので >patchを作ってみました. いかがでしょうか. どうもありがとうございます. バグも結構ありますが... それよりも, 機能の追 加,実装上の変更が付け加わっていますね(^^;;; >@@ -368,8 +368,7 @@ > txn.outer.write_cache = txn.write_cache.dup > txn.outer.delete_cache = txn.delete_cache.dup > else >- close(HOLD_READ_CACHE) >- @db = @db_adapter.open(@db_name) >+ flush_db > end > end むむ... >@@ -418,6 +417,7 @@ > for key, value in @write_cache > @db[key] = Marshal.dump(value) > end >+ @db.commit > @write_cache.clear > end > private :flush_db 確認なんですが, dbm系では gbm_store すると, その場で, ファイルに書き込ま れてflushされると考えて良いんですね? >@@ -665,6 +665,11 @@ > ODBM.Fail ErrAdapterInterfaceNotImplement, "delete" > end > >+ # commit database >+ def commit >+ ODBM.Fail ErrAdapterInterfaceNotImplement, "commit" >+ end ここ, commitではなく flushに変更しました. > # close database > def close > ODBM.Fail ErrAdapterInterfaceNotImplement, "close" >@@ -674,6 +679,10 @@ > autoload :DBM, "dbm" > class DBM_Adapter def self.open(name) >+ new(name) >+ end >+ >+ def initialize(name) > @db = DBM.open(name) > end うーん... 気付かなかった... ほとんど意味のないAdapterになっていたのね... > class PHash_Adapter def self.open(name) >+ new(name) (中略) このクラスの意図がよく分りましたね(^^;;; __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---