私はいくつかのハイレゾファイルをサービスに保存しています(重要な場合は100K +)、私は別のギャラリーでそれらを整理します。誰かがギャラリーにアクセスすると、サムネイルと画像のローレア・バージョンのみが表示されますが、場合によっては透かしが入っていない場合もあります。さて、ギャラリーのページに表示される低解像度のバージョンは、X日後にサーバーから削除されます。誰かがギャラリーにアクセスしていて、ファイルのローレストバージョンがサーバー上に存在しない場合、それはオンザフライで生成されますが、ローレスを生成すると、ウォーターマークを付ける必要があるかもしれません。PHPのパフォーマンスstrposのファイル名またはMySQLのクエリ
if (strpos($file_name,"FREE")===false){ //add watermark }else{ //just resize}
:
現在、画像を表示するスクリプトは、任意のSQLは、それがすべてのファイルシステムに基づいています(ファイルが存在する場合、など)と画像かを透かしする決定が基づいている呼んでくださいしません
私のロジックは、ファイル名またはファイルIDに対してSQLクエリを実行し、ウォーターマークの付いていないイメージにする必要があるかどうかを確認するよりもパフォーマンスが優れていると言います。しかし、私はそれが無料の単語を含むファイル名を持っているのは少し不便だと思う。
strposの代わりにSQLクエリを使用した場合のパフォーマンスの差はどれくらいですか?
システムがかけて添加されている全てのギャラリーで、数年間のために働いするように設計されている:回答やコメントを要約する
EDIT/UPDATE
まだアクセス可能な時間。これは、ストレージの要件が巨大であることを意味し、古いアルバムの高解像度画像は、低速で安価な専用ストレージでオフサイトに移動されるため、サムネイル全体からさらにオーバーヘッドを取り除くことは重要な選択肢ではありません。昨年、私は3TB以上の画像を保存する必要がありました(これは高さのサイズのみです)。
私はLighttpdを利用していますので、既存のサムネイルで最高のパフォーマンスを得るには
rewrite-if-not-file
を使用するつもりです。私はI/O書き込みペナルティについて知っており、必要最小限に抑え、必要な場合にのみ、好ましくは読み込みを行います。しかし、@ N.Bのコメント。実際にSSDにローレス画像を保存することを考えました。ディスクに作成して書き込む必要がある場合でも、通常のHDDよりもはるかに優れたI/Oパフォーマンスを備えています。
私はスケジュールが遅れており、今月末までにシステムを稼働させる必要があります。 (私はちょうど彼らが古いシステムのプラグを引っ張っている爆弾を今日持っている)。はい、柔軟性が私がSQLを使いたいという主な理由ですが、私はSQLデータベースが大きく成長することを期待しています。ファイル情報のほかに、私も同様に保存する必要がある他の情報がたくさんあります。 、ダウンロードなどが含まれています。そのため、SQLに多大なプレッシャーをかけていないことを確認しています。
ファイル名に 'FREE'タグはどこにありますか?本当にSQLクエリを避けたいのであれば、memcachedやその他のKVストアをキャッシュに使用したり、タグをファイル名やパスの特定の位置に置いたりすることができます。 – Pred
あなたのパフォーマンスのペナルティは、ファイル名を扱うのではなく、ディスクへの書き込みの形になります。 MySQL、ファイルシステムなどを使用する場合でも、ディスクへの書き込みが始まると、スクリプトは遅くなります。したがって、どのようなソフトウェアを使用する場合でも、制約要因は作業を実行するドライブのI/O機能になります。これはもう一つのXYの問題です。あなたの心の中で解決策を提示する2つのアプローチ間のアドバイスを求めていますが、実際の問題はまったく別のところです。 –