【Perl】掲示板を使ろう! (506レス)
【Perl】掲示板を使ろう! http://medaka.5ch.io/test/read.cgi/php/988890976/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
66: panton [] 2001/07/04(水) 04:10 ID:iYqhBR52 >>45 rubbish_lister様 遅レスで申し訳ないです。 > * line 154 > これは > sub articles{ return @{ $_[0]->{_idxlist} } } > でいいのではないでしょうか。 あれ?こうすると、配列でなくリストで返されて、スカラーコンテキストだと、 採用されるのは要素数ではなく最後の要素になっちゃうと思ったんですけど、 違うんですね。勉強になりました。 オーバーヘッド的にはどうなんでしょう? 挙動から予想すると、配列全部ではなく、 要素数が帰ってるみたいなので、大丈夫なんでしょうか? IO:Fileはそのとおりです。 以前TODOに入れてたような気がしたけど、ないですね。TODOで。 $_ は個人的に混乱しない限り使わせていただきます。 Perl大好きっ子なんで。 http://medaka.5ch.io/test/read.cgi/php/988890976/66
67: 名無しさん@お腹いっぱい。 [age] 2001/07/06(金) 22:51 ID:??? ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,・∀・) < さっぱりだよ。 〜(___ノ \_______________ http://medaka.5ch.io/test/read.cgi/php/988890976/67
68: 名無しさん@お腹いっぱい。 [ ] 2001/07/08(日) 17:52 ID:??? 初歩的な質問ですみませんが、 データファイルって、読み込みの時にもロックした方がいいですか? それから、レスを多次元配列に入れてから書き出したいのですが、 配列全体のサイズが100KBとかになっても問題ないですか http://medaka.5ch.io/test/read.cgi/php/988890976/68
69: 名無しさん@お腹いっぱい。 [] 2001/07/09(月) 00:38 ID:vYQpj6T6 >>68 おれはflockが使えるときは読み込みのときでも flock(FILE, LOCK_SH) ってやってるよ。 ただしsymlinkを使ったりする場合は読み込みではロックしない。 配列サイズは、サーバのメモリ容量とアクセス頻度を考慮して 判断すべきだから一概にいえないけど、 うちの環境では100KBならまず気にしない。1MBだと気にするかも。 http://medaka.5ch.io/test/read.cgi/php/988890976/69
70: 名無しさん@お腹いっぱい。 [] 2001/07/09(月) 10:12 ID:8Wkoq3g6 >69 気にしてください、お願いします http://medaka.5ch.io/test/read.cgi/php/988890976/70
71: 名無しさん@お腹いっぱい。 [sage] 2001/07/09(月) 10:21 ID:??? 専用鯖なんじゃないの? 共用鯖だったら締め頃したくなるところだが http://medaka.5ch.io/test/read.cgi/php/988890976/71
72: 名無しさん@お腹いっぱい。 [ ] 2001/07/09(月) 10:34 ID:??? >>70 そっか、そうすると たとえばデータファイルで100行分、まあ、レス100を表示するとすると、 データファールから1行読み込んで、書き出し、1行読み込んで書き出し みたいにするのが現実的デスカ。 たとえばスレッドID、はじめのレス番号、最後のレス番号を与えると、 そのレスの内容を配列で返す。みたいな関数を作って、というのが楽そうだったのだけど、 あまりおすすめできないと言うことですね。 http://medaka.5ch.io/test/read.cgi/php/988890976/72
73: 名無しさん@お腹いっぱい。 [0] 2001/07/09(月) 11:06 ID:??? そうすると、>>69はファイルロックの話も含めて、ネタか? http://medaka.5ch.io/test/read.cgi/php/988890976/73
74: 名無しさん@お腹いっぱい。 [ ] 2001/07/10(火) 22:56 ID:??? >>73 ファイルロックは必要。しないとログファイル壊れるよ。 http://medaka.5ch.io/test/read.cgi/php/988890976/74
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 421 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s