5

私のウェブサイトの一部として約20万枚の画像があります。各画像は、フルサイズ、サムネイル、大きいサムネイルの3回保存されます。フルサイズの画像は約50Kbから500Kbです。

通常の技術:VPS上のLinux、Apache、MySQL、PHP。

ブラウザを介してすばやく取得して表示するためにこれらを保存する最適な方法は何ですか?

すべてを1つのフォルダに保存する必要がありますか?フルサイズの画像を1つのフォルダに保存し、サムイルを別のフォルダに保存する必要がありますか?画像を1000のフォルダに保存し、画像がどのフォルダにあるかを示すインデックスを保持する必要がありますか?

アドバイスありがとうございます。アルバート。

4

5 に答える 5

3

私は、3レベルまたは4レベルの深さの分割ディレクトリ構造を使用します。このアイデアは、すべてのファイルを多くのディレクトリに均等に分割して、主に簡単なメンテナンスと高速アクセスを可能にします。

どうやってするの?さまざまな選択肢があります。

  • 画像名の最初の文字を取る
  • 名前のハッシュの最初の文字を取る
  • 写真が追加された日付の1970年以降の最後の秒数を取得します
  • データベース内の画像のIDの最後の文字を取得します(存在する場合)

IMG8993_full.jpg、IMG8993_thumb.jpg、IMG8993_smallthumb.jpgがあるとします。

次に、たとえば、次のようになります。

/images/I/M/G/8/IMG8993:
IMG8993_full.jpg
IMG8993_thumb.jpg
IMG8993_smallthumb.jpg
于 2008-11-24T21:14:30.933 に答える
1

ユーザーが画像のディレクトリリストを含むフォルダを開く場合を除いて、フォルダ構造によってユーザーの取得速度が大幅に向上または低下することはないと思います。他の人が言っているように、インデックスがオンになっていることを確認してください。ただし、私があなたの場合は、画像をWebファイル構造に直接保存するのではなく、画像を動的に提供するサービスを作成(またはコピーアンドペースト)することを検討します。PHP内でのLibGDの使用を検討してください。ほとんどのLAMPサーバーにプリインストールされている必要があります。

短所:

  • サービスを介して画像を提供することは、直接リンクを提供するよりも少し遅くなります
  • データベースなどのバックエンドイメージストアを使用すると、クラッシュしてすべてのイメージが一時的に使用できなくなる可能性があります

利点:

  • 画像のサイズを動的にサムネイルに変更することでストレージスペースを節約し、メンテナンスを容易にします
  • 一般的に、プロセッサの速度はストレージスペースよりも安価です

URL書き換えを使用すると、次のような醜いURLを変換することもできます。

/imageServer.php?userID=12345imageId=67890&size=full

より洗練された、ユーザーにとってより透明なものに:

/jeremyZX/images/myPhoto.jpg
/jeremyZX/images/tn/myPhoto.jpg

これにより、画像のディレクトリ構造全体の外観が得られますが、実際には、任意のバックエンド形式で保存されます。

于 2008-11-24T21:29:22.463 に答える
0

それらを取得する方法については、インデックスを作成する方法によって異なります。

それらをすべて1つのフォルダに保存することに特に反対はありませんが、管理が難しくなります。それらをファイル名で保存していて、ファイル名が適度に正規分布している場合は、名前の最初の文字などでサブフォルダーを区切ることができます。追加された日付でインデックスを作成する場合は、それでそれらを分離することをお勧めします。 。

私の知る限り、ブラウザで取得するために画像を保存する「速い」または「遅い」方法はありません。

于 2008-11-24T21:11:03.437 に答える
0

何をするにしても、ファイルシステムでディレクトリインデックスが有効になっていることを確認してください(それをサポートするファイルシステムを選択する必要がありますが、すべてサポートされています)

実際には、たとえばext3では、新しいシステムではデフォルトで有効になっているため、これは問題にはなりません。tune2fsを使用して調べることができます(男を読んでください)

于 2008-11-24T21:16:22.257 に答える
0

これらの種類の数値を使用すると、サーバーに設定されたiノード制限に遭遇する場合と遭遇しない場合があります。誰がそのボックスを制御するかによっては、問題が発生する可能性があります。

一般的に、私はそれらをより扱いやすいサイズに分割するためのいくつかのスキームを思い付くでしょう。そのサイズのディレクトリで実行lsしている場合でも、すべてを並べ替えて表示するには時間がかかります。

于 2008-11-24T21:23:58.557 に答える