0

PHP/MySQL CMS で画像を処理するためのベスト プラクティスに関する簡単な質問です。各アイテムにはさまざまな数の関連する画像があり、アイテム ID によって参照されるフォルダーに保存されます。検証はアップロード時に行われるため、すべてのファイルが有効である必要があります。私の質問は、ID とファイル名もデータベース テーブルに格納し、DB からソース データを取得する必要があるかどうか、または単にフォルダーを反復処理してソース ファイル名を直接挿入しても問題ないかどうかです。

それが理にかなっていることを願っています。アドバイスをよろしくお願いします。

4

1 に答える 1

1

それは、必要な障害点の数と応答時間の速度に大きく依存します。

ファイルシステムに保存する場合:

  1. 着信 HTTP 要求
  2. PHP がデータベースにクエリを実行する
  3. データベースは行を見つけます
  4. PHP がクエリ応答を解読する
  5. PHPはファイルを読み取ります
  6. PHP は、ファイルのバイナリ コンテンツを HTTP 要求への応答として送信します。

ただし、データベースにバイナリ BLOB として保存する場合は、次のようになります。

  1. 着信 HTTP 要求
  2. PHP がデータベースにクエリを実行する
  3. データベースは行を見つけます
  4. PHP がクエリ応答を解読する
  5. PHP は HTTP 要求への応答としてバイナリ コンテンツを送信します。

どちらの場合も、ステップ 3 (データベースが行を見つける) は、適切なインデックス/キーが設定されている限り、blob 列を使用しない場合と同じくらい高速です。MySQL は、ポインターを正確なインデックス位置に内部的に移動します。正しいバイトが見つかるまで、実際にはすべてのバイトを通過するわけではありません (それがインデックスのポイント全体です)。これは、PHP がファイルを手動で読み取るのと同じくらい時間がかかります。ただし、現在、これをサポートするサポート パフォーマンス データはありません。

次に、失敗のポイントについて説明します。

  • データを移行するとします。バイナリ イメージ データがデータベースに格納されている場合は、データベースを移動するだけです。ただし、バイナリ イメージ データがファイル システムに保存されている場合は、両方を移動することを忘れないでください。また、移行のサイズは同じ (または少なくとも最小限の違い) になることに注意してください。
  • アセットの名前を変更することを検討してください。データベースだけでなく、ファイル システムでも名前を変更する必要があります。DBで名前を変更するのは1つだけであるのとは対照的に、これは合計2つのステップです。
  • アセットを削除することを検討してください。両方の場所で削除する必要があります。

移植性、柔軟性、および障害や破損を最小限に抑えるために、私は常にバイナリ データを BLOB としてデータベースに格納してきました。

ファイルを BLOB としてデータベースに保存する場合は、さまざまな BLOB ストレージ要件を考慮してください: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html#id656744

  • TINYBLOB - 256 バイト
  • MEDIUMBLOB - 64 キロバイト
  • LONGBLOB - 4 ギガバイト

最後に、ちょっと考えさせてください。私は、新進気鋭のエンタープライズ レベルのコンテンツ管理システムである Adob​​e の Day CQ を使用した経験があります。主に Java で書かれていますが、注意すべき重要な点はデータ アーキテクチャです。それは多かれ少なかれ多次元 MySQL データベースのように機能する JCR (Java コンテンツ リポジトリ) を使用します (ちょっとかっこいい?)。その DAM (デジタル アセット マネージャー) 内のすべての画像データは、JCR 内のノードとして格納されます。

于 2012-06-29T00:44:07.570 に答える