Rhino(java)を使ったServer-side JavaScript(MaachangComet)を開発しています。
MaachangDbmとは、javaで作成されたDBM[データベースマネージャ]で、
Key,Value形式の内容を永続化させます.
データ管理最大数は、4250000件(425万件)です。
MaachangDbmの利用方法について説明します。
MaachangDbmを利用するには、まず最初に、以下のように、MaachangDbmを初期化する
必要があります。
--------------------------------------------------------------------------------
MaachangDbm dbm = new MaachangDbmImpl( "dbm" ) ;
--------------------------------------------------------------------------------
第一引数には、MaachangDbmの内容を保持するディレクトリ名を指定します。
これで、MaachangDbmが利用可能になります。
また、MaachangDbmを操作するには、
<例>
--------------------------------------------------------------------------------
MaachangDbm dbm = new MaachangDbmImpl( "dbm" ) ;
dbm.put( "hoge".getBytes( "UTF8" ),"hogehoge".getBytes( "UTF8" ) ;
byte[] b = dbm.get( "hoge".getBytes( "UTF8" ) ) ;
System.out.println( new String( b,"UTF8" ) ) ;
dbm.remove( "hoge".getBytes( "UTF8" ) ) ;
--------------------------------------------------------------------------------
などで、利用できますが、この場合["hoge".getBytes( "UTF8" )]などと記述するのは、
面倒です。
このため、MaachangDbm操作用オブジェクトとして、別途[MaachangDbmOp]が用意されて
います。
利用方法としては、以下の通りです。
<例>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MaachangDbm dbm = new MaachangDbmImpl( "dbm" ) ;
MaachangDbmOp op = new MaachangDbmOp( dbm ) ;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
または、
--------------------------------------------------------------------------------
MaachangDbmOp op = new MaachangDbmOp( "dbm" ) ;
--------------------------------------------------------------------------------
のようにMaachangDbmOpを初期化します。
そして、MaachangDbmOpの利用方法は、下記の通りです。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
op.put( "hoge","moge" ) ;
String a = op.getString( "hoge" ) ;
op.remove( "hoge" ) ;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
あと、いろいろ利用できますので、詳しくはJavaDocを参照してください。
org.maachang.dbm.engine.Flagオブジェクトは、メモリー上で
空きブロックを管理していたが、この場合、ちゃんと終了処理を
実行しないと、空きブロック内容を保存できない。
これでは、耐障害性にすこぶる悪くなるので、java.nio.MappedByteBufferで、
空きブロック管理をおこなうように変更。
また、この修正に伴い、org.maachang.dbm.engine.MDbmThreadで、
裏からorg.maachang.dbm.engine.Flagを保存するように仕組みを
作っていたが、必要なくなったので、削除。