• 締切済み

DBMの容量制限

DBモジュールを使ってちょっとしたDBを作ってるんですが、容量制限 らしきものでひっかかってます。そう、1024byteの壁です。これを越えると sdbm store returned -1, errno 22, key "0012018" at ./hoehoe.pl line ~. と叱られてしまうのです。 他にもODBMはもちろんのこと、NDBMも試しましたが結果は同じです。 容量制限のない GDBM、DB_Fileは大丈夫でした。 しかし SDBM、NDBMは 4096byteまで大丈夫だったはず。なにか別の方法が あるのでしょうか? 今回の試しに以下のものを書いてみました。「3000」を「1000」くらいに すると通ります。DB_File、GDBMでは「3000」でも大丈夫です。 ---------------------------------------- use Config; use Fcntl; use SDBM_File; $flags = O_CREAT|O_RDWR|&BINARY; tie( %HOE, 'SDBM_File', 'hoe', $flags, 0666 ) || die "Can't open DB"; $uiui .= 'UIUI' while( 3000 > length( $uiui )); $HOE{'key'} = $uiui; untie( %HOE ); print "ok\n"; exit; sub BINARY{ return O_BINARY if( $Config{osname} =~ /^(MS)?Win/ ); }

みんなの回答

回答No.2

ああ、SDBMだけじゃなくてNDBMにも制限が1kだけど?という質問 だったんですね。失礼しました。 私の使ってるOSはNDBMをGDBMでエミュレーションしてしまうので、 制限無しでした。 http://www.wwnet.net/~janc/incnote/dbm.html などのNDBMの項を見ると > However, there is still a limit on the total size of the key/content pairs that can be stored (this ranges from 1018 bytes to 4096 bytes). とあるのでこれによると必ずしも4Kと限っているわけじゃなさそうです。 お使いのOSの環境にもよるんじゃないでしょうか。

dany
質問者

お礼

なるほど、環境もしくは設定によって違ってくるのかもしれませんね。 もうちょっと調べてみたいと思います。ありがとうございました。

回答No.1

perldoc AnyDBM_Fileでも、5.6.0で配布されているソース見ても、 制限は1024でしたよ。4096はdirの方ではないですか。

dany
質問者

補足

http://www.din.or.jp/~abe/Perl5Man/AnyDBMFile.3pm.html これによるとSDBMにはデフォルト「1k」で再定義可能 のようですね。といってもプロバイダなのでroot権限もって ないからどうしようもないのですが。^^; しかしNDBMは「4k」とあるのですが、これは1レコードのサイズ とは違うのでしょうか? NDBMでもうまくいかないのです。

関連するQ&A