Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
Dismiss

ファイルの有無でリクエストを振 り分けたい

閲覧: 1 回
最初の未読メッセージにスキップ

Tanaka-Qtaro-Yasuhiro

未読、
2004/02/20 0:15:202004/02/20
To:
田中久太郎です。

ウェブ上の画像ファイルをデータベースで管理したいと思っています。

ただ毎回データベースから取り出しているとパフォーマンスが悪そうな
ので、一度リクエストされたファイルは実ファイルとして残しておくこ
とはできないものかと考えています。

例えば、以下のリクエストがあったときに、
http:/www.example.jp/image/abc/foo.gif

image/abc/foo.gif のファイルがあった場合と無かった場合で、次の
ように処理を分けたいのです。

【ファイルがある場合】
そのまま image/abc/foo.gif を渡す。

【ファイルが無い場合】
image_output.cgiを起動して、データベースに格納している
foo.gifをストリームに吐き出す。
ついでに image/abc/foo.gifを実ファイルとして出力しておく。

こういったリクエストの振分けを Apacheの設定で(mod_rewriteあたり
を使って?)行うことは可能でしょうか?


--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp

名称不定

未読、
2004/02/20 7:27:352004/02/20
To:
DBの外に出すとなると、DB内のファイルと実ファイルの
内容が一致していることをどうやって保証してやるか
(DB内のファイルが更新された時に実ファイルを
どうやって更新させるか)という問題が起きるのでは
ないでしょうか?
仮に、DB内のファイルが更新されないのなら、
最初から実ファイルにしておけば済む話でしょうし。
また、DBにはファイルへのパス名だけを記録して、
実ファイルをDBの外へ置くという方法もあると思います。
あとは、RAMをたくさん搭載してキャッシュに載せてしまうとか。
下手に実ファイルにも書き出すより、OSのキャッシュ管理機能に
任せてしまった方が速い場合もあると思います。

Tanaka-Qtaro-Yasuhiro wrote:
> 田中久太郎です。
>
> ウェブ上の画像ファイルをデータベースで管理したいと思っています。
>
> ただ毎回データベースから取り出しているとパフォーマンスが悪そうな
> ので、一度リクエストされたファイルは実ファイルとして残しておくこ
> とはできないものかと考えています。

(以下略)

Yasushi Shinjo

未読、
2004/02/20 15:02:472004/02/20
To:
新城@筑波大学情報です。こんにちは。

In article <c14558$fv1$1...@news-wst.ocn.ad.jp>


Tanaka-Qtaro-Yasuhiro <ta...@ca2.so-net.ne.jp> writes:
> 【ファイルが無い場合】
> image_output.cgiを起動して、データベースに格納している
> foo.gifをストリームに吐き出す。
> ついでに image/abc/foo.gifを実ファイルとして出力しておく。

Redirect するとなんとかいけそーな気もします。

> ウェブ上の画像ファイルをデータベースで管理したいと思っています。
>
> ただ毎回データベースから取り出しているとパフォーマンスが悪そうな
> ので、一度リクエストされたファイルは実ファイルとして残しておくこ
> とはできないものかと考えています。

どこまで強い一貫性を求めるかにもよりますが、データベースに入
れてあっても、全部ファイルとしてアクセス可能にしておいて、定
期的に、ファイルが最新かどうかを調べるとか、その程度ではダメ
ですか。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\

Tanaka-Qtaro-Yasuhiro

未読、
2004/02/20 20:52:472004/02/20
To:
田中久太郎です。

名称不定さんの<c14ufj$1tl$1...@news511.nifty.com>から


> DBの外に出すとなると、DB内のファイルと実ファイルの
> 内容が一致していることをどうやって保証してやるか
> (DB内のファイルが更新された時に実ファイルを
> どうやって更新させるか)という問題が起きるのでは
> ないでしょうか?

たしかにそこは注意が必要ですね。
DB内のファイル更新時には実ファイルを消す処理を入れる予定です。

> また、DBにはファイルへのパス名だけを記録して、
> 実ファイルをDBの外へ置くという方法もあると思います。

今は上記の方法をとっています。
ただ、なるべくデータの一貫性を保ちたいのと、バックアップ&リス
トアで楽をしたくて、データベース内にファイルを格納したいと思っ
ています。

> あとは、RAMをたくさん搭載してキャッシュに載せてしまうとか。
> 下手に実ファイルにも書き出すより、OSのキャッシュ管理機能に
> 任せてしまった方が速い場合もあると思います。

なるほど。OSのキャッシュ管理機能ですか。
Linux+Apacheの場合だとどういうふうにやるのがいいですかね。

--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
*-*-*-* NGMP改訂CFV実施中 see fj.news.policy *-*-*-*

名称不定

未読、
2004/02/21 1:19:072004/02/21
To:
想定している負荷(利用者や更新頻度)によって
回答は異なりますが・・・。

Tanaka-Qtaro-Yasuhiro wrote:
> ただ、なるべくデータの一貫性を保ちたいのと、バックアップ&リス
> トアで楽をしたくて、データベース内にファイルを格納したいと思っ
> ています。

一貫性を保つという意味ではDBは有効ですが、
それほど頻繁に(分秒単位で)更新されるのでなければ、
ファイル形式のインデックスで足りるのではないでしょうか。

また、私にはDBよりも普通のファイルの方がバックアップが
簡単に思えます。 tar -zcf backup.tgz /var/www/html みたいに
するだけですし。(^^;;

>>あとは、RAMをたくさん搭載してキャッシュに載せてしまうとか。
>>下手に実ファイルにも書き出すより、OSのキャッシュ管理機能に
>>任せてしまった方が速い場合もあると思います。
>
> なるほど。OSのキャッシュ管理機能ですか。
> Linux+Apacheの場合だとどういうふうにやるのがいいですかね。

Linux なら、RAMの大部分はファイルデータのキャッシュに
割り当てられますので、何も考える必要はないと思います。(^^;
するとしたら、メモリ節約の意味でも、安全のためにも、使わない
プログラム(ftpd とか)を起動させない設定にしておく位でしょうか。

Tanaka-Qtaro-Yasuhiro

未読、
2004/02/21 20:28:412004/02/21
To:
田中久太郎です。

名称不定さんの<c16t8l$82a$1...@news511.nifty.com>から


> 一貫性を保つという意味ではDBは有効ですが、
> それほど頻繁に(分秒単位で)更新されるのでなければ、
> ファイル形式のインデックスで足りるのではないでしょうか。
> また、私にはDBよりも普通のファイルの方がバックアップが
> 簡単に思えます。 tar -zcf backup.tgz /var/www/html みたいに
> するだけですし。(^^;;

ファイルだけならばおっしゃる通りなのですが、ファイル以外の
データも少なからずデータベース内にあるんですよね。それを別
々に管理するのが面倒だなあ、と。
すいません言葉が足りなくて。

> Linux なら、RAMの大部分はファイルデータのキャッシュに
> 割り当てられますので、何も考える必要はないと思います。(^^;

あ、そういう意味でしたか。
データベース内のファイルをストリームで出力したときに、それ
の出力データをRAMにキャッシュできるような仕組みを作る、
という意味に取り違えてました。

#ひょっとするとそういうものもキャッシュしてくれてるのかな?

Tanaka-Qtaro-Yasuhiro

未読、
2004/02/21 20:43:442004/02/21
To:
田中久太郎です。

Yasushi Shinjoさんの<YAS.04Fe...@kirk.is.tsukuba.ac.jp>から
> Redirect するとなんとかいけそーな気もします。

なるほど。
ErrorDocument ディレクティブでやる方法を思いつきました。
401 Not Found なときに、CGIを起動させてやれば良さそうです。

ErrorDocument 401 image_output.cgi
みたいな。

ただ名称不定さんがおっしゃるように、DB内のファイルが更新され
たときに実ファイルの内容を保証するためには、必ず CGIを通して、
ファイルの日付をチェックしたほうがいいかもしれませんね。

その場合は、実ファイルは実際には別の場所に置いといて、一旦 CGI
を通してファイルの日付をチェックした後に URLをそっちに書き換え
る、といいかもです。どの程度のパフォーマンスが出るかは不明です
が。

新着メール 0 件