2011-07-20 2 views
1

私はいつもジレンマを持っています:レコードについては、そのレコードのイメージがある場合はtrue、そうでない場合はfalseの列イメージ(tinyint)を使用できます。ベストを使用する:画像を検出するには、mysqlの列またはファイルのチェック?

また、その情報をデータベースと私のコードに入れることはできません。イメージが存在するかどうかをディスクファイルシステムでチェックします。

どちらももちろん同じ結果が得られます。データベースに格納するということは、ディスク上の実イメージとは別にイメージ状態を維持すること、プログラミングが難しいこと、エラーが発生し易いこと(ディスクイメージはデータベースに記録されていません。

私は通常、ディスクチェックを使用します。しかし、それは私に起こりました、多分これはディスクへのアクセスに大きなペナルティがあります。私はデータベースチェックが高速でなければならないことを知っている、私はとにかくデータベースからレコードを取得する必要があります。しかし、ファイルシステムを使ってイメージが見つかるのは、それが私に起こったかどうかと同じくらい悪いですか?

答えて

2

長所:

  • あなたははるかに速く、あなたが触れることはありませんよう
  • その「私に何のイメージを持っていないすべてのオブジェクトを与える」などの質問に答えるクエリを作成することができますディスク

ディスクに保存するだけの利点はありません。 「責任の単一の場所」のパターンを使用します。つまり、コード内の1つの場所で画像を保存、更新、削除します。この場所では、ファイルとデータベースを更新します。この方法は、非常にエラーのないものにしてください。

これは、アプリケーションにエラーが発生する可能性がある場合は、アーキテクチャをチェックする必要があります。

+0

Thanx。同意する。サーバー上で問題が発生する可能性があり、DBが削除され、イメージが表示されません...しかし、はい、この方法が良いです。 – Jerry2

2

私の意見では、ディスクのチェックは無駄であり、悪い習慣です。 DBはこれを保持する必要があります。

  • これははるかに高速です。
  • のレコードを検索しないディスク上のルックアップは、エラーと見なす必要があります(もちろん、これはもちろん でも気楽に行えます)。

とにかくファイルの名前を維持しているので、列を維持するのはあまり大騒ぎではありませんか?したがって、ファイル名が更新されると、この列もそれに応じて更新する必要があります。データベースに格納するための

+0

データベースの列を維持するのは大変な作業ですが、データベースレコードのフラグを見ることは、実際にイメージファイルがあるかどうかを示すことはできません。イメージはそこにあるかどうか。何らかの理由でデータベースにヒットしている場合を除いて、両方のメモリが(少なくともUNIX/Linuxの下では)キャッシュされる可能性があるため、大きなパフォーマンス上の違いはありません。 –

+0

@dj_segfault - 私は彼がとにかくイメージ名/パスを取得するDB。私はこのケースではDBがイメージがあるべきだと言い、システムがそれを無視して続行するのを望まないと思います - あなたは何が起こったのかを知り、調査したいと思うでしょう。 – Galz

+0

イメージが1つしかないので、イメージ名はidフィールド+ "jpg"です。 HTMLではなく、従来のASP /ファイルシステムオブジェクトを使用してファイルをチェックしています。 – Jerry2

1

イメージが存在する可能性が高いか、存在しない可能性は高くなりますか?ファイルが存在するかどうかを確認する場合は、常にファイルを使用しますか?

両方の回答が「はい」の場合は、必ずディスクを使用してください。時間が圧倒的に多いと思われる理由がある場合は、@fileを使用してFALSEの戻り値を処理します(特に、file_existsにはクロスプラットフォーム実装の問題がある可能性があるため)。私はこれが適切な実践以上のものであると考えています。

ない場合は、あなたのプログラムの流れを見てする必要があります:

は、データベースを依頼 - ファイルが存在しませんか?

  • yes =ファイルをフェッチします。
    • ファイルが本当に必要でない場合、ファイルが存在すると仮定して何かを実行してください。
    • 他のファイルをフェッチする=>ファイルフェッチが成功しましたか? (DBクエリでもこのチェックを行っています)
      • yes =ファイルで何かを実行します。
      • = update dbとファイルなしで何かを行います。
  • no =ファイルなしで何かを行う。あなたがファイルを使用する予定の場合はDBを使用して、最適化することができる唯一の時間ということを意味しているのが言ったら(?はcronを更新する存在を提出する時期?)

を、あなたは、ファイルをチェックするを持っているDBを使用すると、ファイル自体が必要ないときです。

関連する問題