質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1791閲覧

画像アップロードを繰り返し行っていると速度が低下する?

hitsujimeeee

総合スコア486

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/01/06 07:54

編集2017/01/06 08:10

いつもお世話になっております。

現在PHPでブラウザからファイルアップロードしてWebサーバーに保存する機能を実装しています。

機能自体は実装し終わっているのですが、ふと「DBに保存する方法もあるんだっけ。どう違うんだろう」と思ったので少し調べてみたら、以下のような文面を見つけました。

自分が作るような小規模なWebアプリケーションなどならパス保存かな
という印象ですが、ディレクトリ構成なども考えておかないと
突然遅くなったりということもあるのでファイルで保存の場合は
注意しておきましょう!

【参考】
画像をDBに保存するのか?パスだけ保存するのか?

突然遅くなるというのは、おそらくファイル数(ファイルサイズ?)が膨大になってきた場合に発生するのだろうと考えているのですが、ディレクトリ内の画像数が増えただけでそこまで遅くなるものでしょうか?また、もし遅くなるのだとしたら、画面で表示する時の読込みとPHPで画像を保存する時両方とも遅くなるのですか?

画像ファイル数はMAX10万件程度を想定しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ファイルシステムの実装に依存しますが、ディレクトリ直下のファイル数によって遅くなります。
顕著に遅くなるのはファイルの列挙で、ファイル名を直接指定する場合も遅くなることがあります。

例えば、ext3でhTreeが有効化されていない場合、ファイル名を指定したアクセスも線形探索になるそうです。
http://ja.stackoverflow.com/questions/11794/
(それ以前にext3はディレクトリ配下に31998ファイルしか保存できませんけども)

ext4を使っていて、ファイル名を直接指定してアクセスするだけであれば、影響は少ないでしょう。
しかし、実際にはファイルを列挙する処理が意外とあるものです。
ファイル数が多くなる見込みなら、ディレクトリを分割したほうが賢明でしょう。

投稿2017/01/06 08:34

night1ynx

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hitsujimeeee

2017/01/08 13:28

なるほど、ファイルシステム次第だけどファイル名直接指定でも遅くなることがあるんですね。 ファイル名から規則的にディレクトリ分割してみようと思います。ありがとうございました。
guest

0

はい、1つのディレクトリに大量のファイル(万単位)を置くと、極端にアクセスが遅くなることがあります。

ということで、大量にファイルを置く場合、頭文字でフォルダを作って、その中に入れる、ということがよく行われます。

投稿2017/01/06 08:21

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まぁDBにバイナリデータを登録していいことなんて何もないですからね
検索がきいたり集計ができたりするわけではないので

画像データとDBを連携するならデータはあくまでファイルとして管理し
DBには画像のIDとマイムタイプ、集計するであろう情報(サイズや縦横の長さ、アップ日など)
を保持するのが妥当です

投稿2017/01/06 08:23

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/01/06 08:30

「SQLアンチパターン」という書籍で「ファントムファイル」として挙げられているように、「データごとDBに格納する」というのも、DBで一元管理できるようになるので、状況によってはじゅうぶん現実的な選択肢だと思います。 もっとも、AWS S3などのオブジェクトストレージを簡便に使えるようになった昨今の状況を考えると、(ロックインされる問題を無視すれば)それがいちばん便利、という場面も多いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問