△▲ WebProg 初心者の質問 Part19 ▼▽

このエントリーをはてなブックマークに追加
952nobodyさん:2009/06/01(月) 22:32:50 ID:???
>>951
ブラウザ組み込みのインタプリタに対してという意味なら、
プロセス起動や構文解釈の分当然遅くなる。
953nobodyさん:2009/06/01(月) 22:35:35 ID:???
>>952
ありがと。じゃあ止めておくかな。
遅くなるって、どれぐらい遅くなる?
1秒以上は掛かる?
954nobodyさん:2009/06/01(月) 22:53:19 ID:mfjwGsXQ
ごく小さいPerlなら300msecは遅くなるんじゃねーの?
955nobodyさん:2009/06/02(火) 08:18:40 ID:???
>>952
ブラウザ組み込み・・・?
956nobodyさん:2009/06/02(火) 08:39:41 ID:???
質問です

↓見たいなhtmlで、
----
<input type='button' onclick='hogehoge();'>
----

↓みたいなjavascriptで、
----
hogehoge () {
alert("test");
 document.frm.submit();
}
----

複数ページで何箇所か同じような事をしているんですが、
一箇所だけ、何故かfirefox限定でsubmitが動いてくれません。
alertのtestは出るので、hogehogeは実行されていると思うのですが。。
あと、エラーコンソールには何も出ていませんでした。

formタグとか、nameがfrmになっているかとか、ケアレスミス系は全て確認しました。
というかIEとoperaで確認すると、普通に動きます…orz

この状態で、何か思い当たる原因って考えられますでしょうか?
アドバイス宜しくお願いしますm(_ _)m
957nobodyさん:2009/06/02(火) 08:53:53 ID:???
全部載せないとエスパーにしかわからんよ
958nobodyさん:2009/06/02(火) 10:44:33 ID:6oflzVcZ
>>952
>>951 は CGI とかサーバーサイドの話かと思うよ
959nobodyさん:2009/06/02(火) 11:23:19 ID:???
>>956 よい子はローカルルールを読んでね
960nobodyさん:2009/06/02(火) 11:24:45 ID:???
>>956
submitボタンがあるとsubmit()が利かなかった気がする
まぁ試してないけど
961nobodyさん:2009/06/02(火) 15:49:21 ID:3kgfpOUB
質問です。perlとアパッチで掲示板のようなものをつくりたいのですが、

サーバー負荷を考えて、テキストデータと画像のデータを2つのサーバーに
わけて保存する仕様にしたいと思っています。

それを実現する方法は、どういったものがありますでしょうか?
できれば、テキストを登録するcgi部分(仮にAとする)を窓口として画像登録も済ませることが
できる構造にしたいのです。記事番号をAからうけとって画像をアップロードを受け持つ
cgi部分は別サーバーにCGIをおいて、画像送信完了画面で、Aの部分に飛ぶという
ことしかないでしょうか?

そうした場合は、(不正な)画像だけ登録して、掲示板の閲覧cgiを参照せずに
ダイレクトに画像だけをみるということも可能ですが、これを投稿が完了しない
かぎり画像は有効にならず一定時間後に破棄されるといったギミックを仕組みた
いのですが、テキスト保存(掲示板表示)サーバーと画像保存サーバーとの
連携など、なにかアイデアがないでしょうか?
962nobodyさん:2009/06/02(火) 15:59:56 ID:???
Aの処理の最後でBにコミット飛ばすようにするしかないんじゃね。
プロトコルはてきとーに。

でも普通はテキストと画像を分けるんじゃなくて
同じ処理をするサーバーを複数用意するんじゃないかねー。
963nobodyさん:2009/06/02(火) 16:07:21 ID:???
普通にサーバ1のスクリプトA内でサーバ2に画像をコピーしてやればいいんじゃないの
964nobodyさん:2009/06/02(火) 16:09:05 ID:???
>>961
投稿時に、画像と記事を一緒のHTTPでアップしてもらうようにすれば何でもできるでしょ。

Aサーバーは、受信完了したら、まずBサーバーに画像を転送して、それが成功したら記事
を登録すればいい。記事と画像の関連づけは、書き込み内容のデータファイルを作って、
それでやればいいじゃん。例えばタブ区切りで、URLエンコード(でも何でもいいけど)した
記事とBサーバーでの画像のパスを入れておくとかしてさ。

AからBへの画像転送は何でもいい。FTPでもSCPでも、フル権限設定できるサーバーなら、
NFSでマウントしたディレクトリに直接コピーしてもいいと思う。もしくは、BサーバーにHTTP
で画像を受信できるスクリプトを入れておいて、そのスクリプトが、Aサーバーからの送信し
か受け付けないようにしてもいいわけだし。
965nobodyさん:2009/06/02(火) 16:26:47 ID:???
>>961
全てをSSL配下に置くのでも無い限り、
サーバ負荷を気にして、テキストと画像を別サーバに置く必然性は無いと思う。
回線も全く別と言うのならば、帯域分散にはなるけど。
966nobodyさん:2009/06/02(火) 16:40:46 ID:???
>>963
>>964
それって負荷分散どころか負荷増えてるだろ。
967nobodyさん:2009/06/02(火) 16:44:22 ID:???
>>961がどの処理の負荷を分散させたいのかがわからん。
漏れは、画像ファイルのContent-TypeをIEが無視することによって起こるXSSを排除するために、
画像ファイルの正当性を検証する処理かなと思ったのだが。
968nobodyさん:2009/06/02(火) 16:44:48 ID:???
なんで?投稿より閲覧のほうが頻度高いんだから投稿時に適当に処理してやればいいじゃん
それとも投稿時の負荷低減が目的なの?
969nobodyさん:2009/06/02(火) 16:46:22 ID:???
普通に考えたら投稿より閲覧の回数が圧倒的に多いだろうが、
正確なところは>>961じゃないとわからんな。
970nobodyさん:2009/06/02(火) 16:47:48 ID:???
>>966
何の負荷が増えていると思う?
いまの情報内で。

画像の転送負荷のことなら、A⇒Bがそれほど遠くないサーバーなら
特に問題ないのかと思ったけど。
971nobodyさん:2009/06/02(火) 16:55:04 ID:???
こんなこと言い出したらキリがない。
画像って言ってるのが例えば医療用工業用の画像とかだったりして
実は数百MBあったりするのかもしれん。

>>961の質問の仕方が悪いでFA
972nobodyさん:2009/06/02(火) 18:57:08 ID:6oflzVcZ
Yahoo のように画像を置くサーバーを別にしたいんだろうね

サーバー A (CGI)
サーバー B (IMG)

A と B にそれぞれ 100Base NIC と 1000Base NIC が1枚ずつある
A と B はそれぞれ別回線 (100Base) である
A と B は Gigabit Ethernet で繋がっている (default gateway 設定無しのローカル通信のみ)
A に対して画像がアップされると B に即座にコピーされる

これなら負荷軽減出来るでしょうけど、画像系 あぷろだ でも無かったり、日あたり数十万 PV もなければ、
気にするだけ無駄ですよ。
973961:2009/06/02(火) 23:42:04 ID:3kgfpOUB
みなさん、沢山のコメントありがとうございます。もう少し具体的に書きますので、
引き続きおつきあいください。

先ほどは掲示板として書きましたが、それは例の話であって、オークション商品登録
閲覧システム、ブログ、記事システム、ショッピングの商品登録システム にすべて
共通する処理ですので、簡単に掲示板としただけです。個人的には、商品登録システム
やマガジン(記事)システムを作っていまして、972さんの指摘の通りヤフオクのよう
に商品ページ(記事ページ)のサーバーと画像送信サーバーを別に起きたいと考えたからです。

負荷分散の狙いは、単に、ユーザー閲覧時にテキストデータ(商品ページ)と
画像は別サーバーにしておけば、アクセス数が増えた時でも、画像送出でもたつく
ことはないだろうと思ったからです。(帯域分散という意味もあります。)もちろん、
そんな心配しても無駄というなら、画像サーバーをわざわざ分ける必要もないと思いますが。

基本的に、普通に登録cgiで商品説明や画像も登録できて、閲覧ページのcgiでは
画像は別サーバーから送信されるってことができればいいのですが。もちろん、
登録完了されていない商品の画像は表示されない(一定期間の保守プログラムで
仮登録データは削除する)といったことができるのが理想です。

また、登録閲覧するサーバー自体を複数に拡張した場合は、検索などでどの商品が
どのサーバーに記録されているかインデックスファイルを持たないといけなくなりますが
そういった部分での手法など、perlとアパッチで構成は可能なのでしょうか?

やはり、ロードバランサーとかもっと別次元の話になってくるのでしょうか?
持っているスキルはperlとちょっとしたアパッチの基本知識くらいなので、なにか
アドバイスをいただけると幸いに存じます。
974nobodyさん:2009/06/03(水) 00:14:01 ID:???
>>973
ロードバランサーはこの際関係ないだろ。

その規模で考えてるなら、別に商品登録時の
画像の転送の負荷なんて微々足るものだろ。
閲覧数に比べれば。

商品登録時に画像を画像用サーバーに転送
すればいい。その手法なんて山ほどある。
んで、どこにアップロードするかは、商品ごと
に画像URL情報を持ってもいいし、商品のID
に紐付けたディレクトリを画像用サーバーに
作って、ファイル名規則だけで関連付けさせ
てもいいと思う。

あと、負荷分散とか考えるなら、商品や記事
を登録・検索する処理をRDBMSにしてもいい
と思う。件数が多くなったところでDBを別サーバー
にできるから。
975961:2009/06/03(水) 00:29:31 ID:gBY2kqmD
>>974
画像用サーバーに転送する手法について、少しヒントをいただけませんか?
たとえば、レンタルサーバー1で登録したデータのうち、画像のみを
レンタルサーバー2に転送し、登録成功していないデータをレンタルサーバー2
から削除する、ということも可能でしょうか?

それと、データですが、テキストファイルで構成を考えているのですが、
検索用のインデックスファイルを用意しておけば、実データファイルを
10万件ずつに区切っておけば、特に問題がないように思うのですが、いかがでしょうか?
976961:2009/06/03(水) 00:33:42 ID:gBY2kqmD
ちなみに、10万件ずつ区切るというのは例でありまして、
インデックスファイルで検索候補を絞ったあとに、商才表示用に
実データをあさるときに、10万行程度のファイルなら瞬時に該当
行を抜けると思いますし、それが書く10万件x10個の合計100万件のデータ
でも、それほど問題ないと思うからです。

また、SQLだとどうしても、インジェクションなどの問題で複雑になりがちで
メンテにも神経を使います。という理由でテキストファイルにこだわりたいです。
977nobodyさん:2009/06/03(水) 00:33:53 ID:???
>>975
何を言っているのかわからないぞ。

登録に失敗した、というのは、どんな条件なわけ?

あと、DBについては、DBのインデックス管理よりも
効率的なインデクシングが自前でできるなら、いい
と思うけど。でも、それを実装するコストの方を考え
ると、RDBMSを使った方が早いと思うけどな。

レンタルサーバーでもMySQLが使えるところは最近
多くなってきているよ。
978nobodyさん:2009/06/03(水) 00:34:54 ID:???
組めば何でも可能だし、それならやってみればとしか・・・・w
979nobodyさん:2009/06/03(水) 00:37:16 ID:???
>>975
「socket ftp」
980nobodyさん:2009/06/03(水) 00:41:32 ID:???
FTP/SCP/NFS(後者二つはレンサバじゃ辛いかw)
あとは、画像鯖と本体鯖をHTTPでつないでもいいと思う。
HTTPでつなぐなら、本体側からみた画像のファイル名を
抽象化できるので楽な管理ができるかもよ。
981nobodyさん:2009/06/03(水) 01:14:09 ID:UMpH1Jgx
サーバーは1台まるごと借りられるプランで、2つ借りるんだよね?
それとも共有サーバーを2つ?



FTP で put するのが一番簡単かと。
982nobodyさん:2009/06/03(水) 05:56:46 ID:???
例が多い人だな
983nobodyさん:2009/06/03(水) 10:30:12 ID:hUsGsYQX
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21843&forum=12
このサイトを見て勉強しているんですが、この人と同じように10件や20件ずつと
件数を指定して表示し、オーバーしたらphpのpear:pagerのように次にいかせる
方法をとりたいのですが、なにかいい方法ありますか?
984nobodyさん:2009/06/03(水) 10:32:53 ID:???
ORDER BY してLIMIT OFFSETで
985nobodyさん:2009/06/03(水) 11:36:37 ID:???
986nobodyさん:2009/06/03(水) 21:28:19 ID:IbTtaomD
ASP.NET MVC 1.0 (.NET Framework 3.5 sp1)
Visual Web Developer 2008(C#)
SQL Server 2005 Express

ブログのようなシステムを作成中です。
一つの記事に対して、3つの画像をアップロードできる
ようにしたいのですが、そのアップロードされた画像
をどのように管理すればよいのか分かりません。

1)特定フォルダに全部保存
この方法だと、画像が増えた場合にディスクアクセスが
遅くなりそうな気がしますし、精神衛生上よくない気がします。

2)適当な数(1000ファイルくらい?)でフォルダ分け
1番の問題を考えての方法。何となくこっちの方が良い
ような気がしてます。

どちらの場合でも、「ファイルの振り分けやナンバリング」
をどのようにやるのか?という疑問も残っています。

画像ファイルはどのように管理するのが適当なのでしょうか?
また、画像ファイルを管理するためのテーブルや、プログラム?
を作成するものでしょうか?

投稿した記事は(画像も)ディスクが一定量になるまでは
保存し続ける、という運用を想定しています。

よろしくお願いします。長文失礼しました。
987nobodyさん:2009/06/03(水) 21:45:17 ID:???
フォルダの中にファイル増えたら遅くなんの?
それwindowsのGUIで開いた時の経験の話じゃねーの?
988nobodyさん:2009/06/03(水) 21:58:02 ID:???
>>987
まさしくその経験の話です。
あれは、ファイル情報もろもろを取得しているから
遅いのであって、ただ単にパスとして指定するだけなら
特に問題ない感じなんですかね?
「体感的には全く問題なし」ということも十分考えられますが、
定石としてはどのような管理がなされているかをご教示
願いたい、という質問の趣旨だと思っていただければ幸いです。
989nobodyさん:2009/06/03(水) 22:06:31 ID:???
ファイルを抽出してHTTPで送り出すだけなら、
一フォルダにたくさんあって遅くなるのは数十万
ファイルのオーダーだよ。

気になるなら、容量は食うけど、SQLSVにバイナリ
で突っ込んでもいいんじゃない。画像の固有IDに
だけ、インデックスを貼るようにしてさ。
990nobodyさん:2009/06/03(水) 22:06:47 ID:???
ファイルのメタ情報を拾ってくる分重いというのはそのとおりだけど、
ディレクトリエントリはひとつずつ線形に列挙して探すしかないので、
ファイル数が多いと目的のファイル名を見付けるまでに相対的に余計に
時間がかかる可能性はあるかもしれない。

それとも、最近のFSは、ファイル名からO(1)で実データに到達できるよ
うになってたりするんかな?
991nobodyさん:2009/06/03(水) 22:09:09 ID:???
>>987
ファイルシステムにもよるけど遅くなったり
ディレクトリあたり32768個以上のエントリを置けなかったりするよ。
992nobodyさん:2009/06/03(水) 22:10:19 ID:???
毎日2つエントリが増えると仮定して、画像ファイルは一ヵ年で最大2190個
20まんこ許容するなら90年たったら次のフォルダを作るとかどうでもいいレベルなので単一ディレクトリに押し込むのが普通と思うが
ブログでは月ごと、年ごとのフォルダ分けくらいはできるものがある
規定数のフォルダに均等に分けるなら例えばアップロード時タイムスタンプの下一桁で分けるとかなんとか。しかしExplorer的一覧性は皆無
993nobodyさん:2009/06/03(水) 22:13:40 ID:???
>>990 じじい乙
994nobodyさん:2009/06/03(水) 22:22:05 ID:???
じーさまは低速モデムでFTP接続してlistしたのを
シリアルコンソールで見る可能性がある。
995986:2009/06/03(水) 22:26:44 ID:IbTtaomD
皆様ありがとうございます。
情報の小出しをするな、と書いてあるにも関わらず、
情報漏れがあったことをお詫びします。
・Windows Server 2008 + IIS7.0
・ファイルシステム:NTFS
・レンタルサーバーの条件で、SQL Server の容量は
  少なめに設定されているので、SQL Server には格納しない
という情報が漏れていました。
お話によると、とりあえず一つのフォルダに押し込んでしまって
良いようなので、そのようにしたいと思います。
タイムスタンプ下一桁で振り分ける方法は思いもよりませんでした。
今後、何かに使えるかもしれません。ありがとうございます。

教えて頂いてばかりで恐縮なのですが、もう一つお願いいたします。
ファイル名はシステム側で割り振らなければいけないと思うのですが、
どのように管理するべきでしょうか?

ただの連番にするにも、じゃあ誰がカウントするの?という疑問があります。
参照カウンタのようなデータをどこかで持っておいて、その値に基づいて
ファイル名をつけるような感じになるのでしょうか?

それと、僕は今、次スレの心配をしています。
どなたかお願いします。(と、僕が言うことでもありませんが)
996nobodyさん:2009/06/03(水) 22:44:53 ID:???
>>990
O(1)は絶対ムリだろう。
XFSとかJFSとか最近できたfsは木構造使っててO(log n)。
ntfsはどうなんだろ。
997nobodyさん:2009/06/03(水) 22:45:29 ID:???
連番なんてあなたの好きなようにすればいいんじゃない?
998nobodyさん:2009/06/03(水) 22:47:24 ID:???
ファイル名はバッティングしないかぎりユーザが決めていいんじゃないの
DBで管理するならDBが勝手に割り当てるファイルIDと、ユーザが決めるファイル名を分けることもできる
というかDBで管理しないとアップロードした画像の管理画面作るのが面倒な木がする
999nobodyさん:2009/06/03(水) 22:48:58 ID:???
>>994
残り少ない寿命で数万のファイルリストが送られてくるのを待つわけか
1000nobodyさん:2009/06/03(水) 22:51:16 ID:???
バッティングしたときだけインクリメントするってのはよくある仕様だな
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。