【Perl】掲示板を使ろう! (506レス)
【Perl】掲示板を使ろう! http://medaka.5ch.io/test/read.cgi/php/988890976/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
75: 名無しさん@お腹いっぱい。 [sage] 2001/07/10(火) 23:59 ID:??? 更新時に、 lock 更新対象読み込み 更新対象変更 更新対象書き込み unlock すれば、壊れないよ。 ただ、更新中に読む奴がいたら表示は狂う。 いちばんいいのは、全部一時ファイルに書き出して一気にrename。 これなら事実上ほとんど表示も狂わない。 ただ、読み込みアクセスが多いと更新失敗する確率は高くなるけど。 http://medaka.5ch.io/test/read.cgi/php/988890976/75
76: panton [] 2001/07/14(土) 06:17 ID:8g/6IMoE オヒザシブリデゴザイマス IndexedFile.pm を更新しました。 http://www.panton.f2s.com/bbs/lib/IndexedFile.pm http://www.panton.f2s.com/bbs/lib/IndexedFile.html IO::Fileの使用廃止と、色々バグ修正があります。 前のバージョンには重大なバグがありました。 見つからなかったってことは、全然使われてねーんだな。 っと思って、手抜きテスト用ボードなんか用意してみました。 http://www.panton.f2s.com/bbs/sbbs.txt http://www.panton.f2s.com/bbs/sbbs.txt (ソース) たいしてテストしてないのでまだバグあるでしょう、・・見つけてよーん。 http://medaka.5ch.io/test/read.cgi/php/988890976/76
77: panton [] 2001/07/14(土) 06:19 ID:8g/6IMoE ぶっ、やっちまった。 http://www.panton.f2s.com/bbs/sbbs.cgi テスト用ボードはこちらでございます。 http://medaka.5ch.io/test/read.cgi/php/988890976/77
78: _gunzip [ぺrlうせr@あねt。ね。jp] 2001/07/14(土) 08:49 ID:??? では二つ三つ.......。 -------------------------- キー名に英数字以外のものが含まれているとおかしくなりますね。 ("@threads"とか"perl-user"とか。) 196行目の >my %hash = ('DUMMY', split /^(\w+?):/m, readline($self->_dathandle)); を my %hash = ('DUMMY', split /^(.+?):/m, readline($self->_dathandle)); にすれば回避は出来ますが...。 -------------------------- modify_row()使用時、更新されたデータは、 データファイルの末尾に追加+インデックス更新されるわけですが、 頻繁に同じ項目を更新するような場合、ファイルの肥大化が問題にならないかな....。 例えば、掲示板のスレッド毎に情報をハッシュの形で格納してある場合 %thread = ( count => 77, #投稿数 subject => "【Perl】掲示板を使ろう!", key => 988890976, server => "http://corn.2ch.net/", dir => "php" ); 投稿がある→そのスレッドの情報を取得( get_by_id() )→(何らかの処理) →投稿数をインクリメント→スレッド情報更新( modify_row() ) Ex. $thread = $logfile->get_by_id($id); $thread->{ count }++; $logfile->modify_row($id, $thread); とすると、投稿の度にハッシュ$threadの内容は末尾に追加されるので (スレッドの情報ログのサイズ) = ( (スレッドの情報サイズ) * (投稿回数) ) * (スレッド数) になってしまいますね。 ・・・と、ここまで書いたときにsynchronize()を思い出した....。 例えば、スクリプト側で if( $thread->{ count }++ % 5 ){ $logfile->synchronize(); } としておけば問題ないね。 いくらかのパディングを余分に取っておいて、 更新された情報が元の場所に収まりそうならそのまま上書きし、 無理なら末尾に回す、とするのもイイかもかも。 http://medaka.5ch.io/test/read.cgi/php/988890976/78
79: _gunzip [p_e_r_l_u_s_e_r] 2001/07/14(土) 08:49 ID:??? あと、198行目の >chomp $hash{$_} foreach keys %hash; は、スライスで chomp @hash{ keys %hash }; と書けたりします。(参考までに) http://medaka.5ch.io/test/read.cgi/php/988890976/79
80: 名無しさん@お腹いっぱい。 [いちちちちt] 2001/07/15(日) 07:23 ID:??? あっげ http://medaka.5ch.io/test/read.cgi/php/988890976/80
81: 名無しさん@お腹いっぱい。 [sage] 2001/07/16(月) 17:17 ID:??? はじめまして。現在機能優先で掲示板を作っていて、コードの 効率は後回し中なのですが、いくつか質問があります。 ・一般ではOpenでテキストを読み書きするのが多いようですが、 (MINIBBS程度の規模でも)TieやDBOPENを使ったものが見かけないのは なぜですか?負荷について問題があるのでしょうか? ・発言データに関して、追加書き込みモードを基本にしてもファイルロックは 必要でしょうか?またどの程度の堅牢性を期待すべきでしょうか? ・読み出しに関して、基本的なスクリプトでは@LINE=<FILE>と していますが、While(<FILE>)やその他の方法のうち、お勧め なのはどれでしょうか?また、Seekを使った読み出しについて 教えてくださいませんか? http://medaka.5ch.io/test/read.cgi/php/988890976/81
82: panton [] 2001/07/16(月) 19:29 ID:YjhPdxYw >>81 ageで書いてもいいんじゃないかと思うけどなんでsage? > ・TieやDBOPENを使ったものが見かけないのはなぜですか? > 負荷について問題があるのでしょうか 掲示板の場合リニアなデータ構造が多いのでハッシュがメインの タイは不向きといえば不向き。配列を結びつける事も出来るが、 インターフェイスが不完全。 > ・追加書き込みモードを基本にしてもファイルロックは > 必要でしょうか? 必要です。堅牢性についてはデータの重要性によります。 > ・読み出しに関して、基本的なスクリプトでは@LINE=<FILE>と > していますが、While(<FILE>)やその他の方法のうち、お勧め > なのはどれでしょうか? >>69あたりからを読んでください。 seekに関しては、固定長なら使えるけど、掲示板のように データ長が不定なデータだと不向き。 そこら辺を解決するためにIndexedFile.pmを作ってるんですが・・・ http://medaka.5ch.io/test/read.cgi/php/988890976/82
83: 名無しさん@お腹いっぱい。 [] 2001/07/16(月) 19:58 ID:SlpU2cdo >>82 age忘れです。 リニアな構造ということですが、発言IDやTIMEをキーにして 残りは従来のままスカラーでもよいと思ったんですが、、、。 負荷についてわからないというのは、ハッシュでは数百発言とも なると負荷がかかるのかとか、あるいは値のサイズによって 負荷が変わるのかとかも考えたのですが。 追加書き込みモードについては、一般に恐れているのは 全部読み出し>退避+追加>全部書き出しの過程での全データ 消失だと思うので、追加書き込みでの危険性があまり認識 できないのです。 http://medaka.5ch.io/test/read.cgi/php/988890976/83
84: panton [] 2001/07/17(火) 15:17 ID:/BDSxh5c >>83 リニアというのは、掲示板は発言の並びに順番があるということです。 TIMEなどをキーにしてkeysでsortなんかをすることも出来ますが、 DBMの起動オーバーヘッドなんかを考えると、 あえて使う必要も無いかなという程度です。 記事数や値のサイズによる負荷の増加は気にするほどではないと思いますが、 よく知りません。 ファイルロックについては、いろんなところで調べてみるといいと思います。 追記モードでも同時に起こると、ファイルの同じ位置に書き込もうとして データがおかしくなります。 http://medaka.5ch.io/test/read.cgi/php/988890976/84
85: 名無しさん@お腹いっぱい。 [] 2001/07/17(火) 17:07 ID:sUEgTyfs >>84 ありがとうございます。 あと他にも、疑問が生じたときに、理由は自分で考えてみたのですが これでいいのでしょうか? while (<FILE>)よりも@line <FILE>のほうが、読み込み時に 早くcloseを行うのでよさげ ・・・・>読み込み時は共有可、書き込み時はどっちみちロック ANHTTP環境ではflock不可 ・・・・>Renameロックかflockコメント化で我慢 全読み>全書き込みvs追加モード ・・・・>ファイルアクセスより管理性重視? レスポンスお願いします。 http://medaka.5ch.io/test/read.cgi/php/988890976/85
86: 名無しさん@お腹いっぱい。 [0] 2001/07/17(火) 19:00 ID:??? 特定の行を抜き出すとき、 $line = (<FILE>)[5]; っていう方法はどうなんですかね。 http://medaka.5ch.io/test/read.cgi/php/988890976/86
87: 名無しさん@お腹いっぱい。 [] 2001/07/17(火) 19:12 ID:HRgjK2II >>86 それは最悪でしょう。 そいういうものこそDB_FileのDB_RECNOを使うほうが良いと思いますがね。 http://medaka.5ch.io/test/read.cgi/php/988890976/87
88: 名無しさん@お腹いっぱい。 [sage] 2001/07/17(火) 19:13 ID:??? なして最悪? http://medaka.5ch.io/test/read.cgi/php/988890976/88
89: 名無しさん@お腹いっぱい。 [sage] 2001/07/17(火) 22:22 ID:??? >>85 > while (<FILE>)よりも@line <FILE>のほうが なんでそんな結論になったのか知らないけど、普通ダメ。過去ログ読めよ。 > ANHTTP環境ではflock不可 HTTPDとflockは関係ありません。 > 全読み>全書き込みvs追加モード 質問の意味がわかりません。 なんか基本的なところがわかってないんじゃない? CGI-MLとかの過去ログでも漁って勉強してきましょう。 >>88 全部読み込んでから[5]だけ残して他は捨てるっていう動作。 http://medaka.5ch.io/test/read.cgi/php/988890976/89
90: 名無しさん@お腹いっぱい。 [sage] 2001/07/18(水) 01:34 ID:??? >>85 > while (<FILE>)よりも@line <FILE>のほうが、読み込み時に > 早くcloseを行うのでよさげ いくらclose()したって、ねぇ…。 89さんの言う通り、避けるべきかと。 「負荷」とか「メモリ」という言葉を(以下略 http://medaka.5ch.io/test/read.cgi/php/988890976/90
91: 名無しさん@お腹いっぱい。 [] 2001/07/18(水) 13:28 ID:aJuOjafs >>90 それは今になってみたら分かります。が、 初心者はこんなことを思っていたという、、、、。 >> ANHTTP環境ではflock不可 >HTTPDとflockは関係ありません。 御免なさい、WIN95+ActivePerl+〜というべきでした。 >> 全読み>全書き込みvs追加モード >質問の意味がわかりません。 何で追加モードがあるのに、わざわざ全読み全書き込みするのか、という ことです。 http://medaka.5ch.io/test/read.cgi/php/988890976/91
92: 名無しさん@お腹いっぱい。 [sage] 2001/07/18(水) 19:10 ID:??? >>91 つまり貴方には「全読み込み+全書き込み」と「追加書き」が同じ様に思えると? 正直ワケ分かりませんが。 http://medaka.5ch.io/test/read.cgi/php/988890976/92
93: 名無しさん@お腹いっぱい。 [sage] 2001/07/19(木) 04:20 ID:??? >>91 追加は追加。増える一方。 書き換えも行わない。 全読み全書きは、中途での処理の可能性を残している。 本当に全部書いてるのか? 加えて、書き換えてるんなら同じじゃない。 実際にテストして考えてから書き込んでくれ。 http://medaka.5ch.io/test/read.cgi/php/988890976/93
94: 名無しさん@お腹いっぱい。 [sage] 2001/07/19(木) 04:23 ID:??? >>91 flockは evalかけろ。 http://medaka.5ch.io/test/read.cgi/php/988890976/94
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 412 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s