2

ファイルを開いて送信する前に、ファイルが存在するかどうかを確認する際に重大なパフォーマンス上の問題があることを認識していますか? このコンテキストは、ASP ページを介して動的にファイルを提供する Web アプリケーションです。データベースにはこの情報が保存されているため、ファイルが存在するかどうかのチェックは行われず、間違いではないと言われました。もちろん、さまざまな理由で間違っている場合もあるため、何も返さずにユーザーを不幸にすることはありません。

私の本能は、ファイルの存在をチェックすることは非常に簡単なので、心配する必要はないということですが、そうではないと言われました。それが役立つ場合、私たちのストレージソリューションはかなり強力なものです(Webサーバー上のIDEドライブだけではありません). 私の質問は基本的に: 私の本能は正しいですか?

ありがとう!

注: これらのファイルは、単に削除されることはありません。それらが失われるには何か問題が発生する必要がありますが、これは週に数回発生します。また、ファイルの存在を確認したい理由は、ディスク上にある代替アセットを返すことができるためです。そのため、例外をキャッチして処理するのではなく、そのロジックをすべて 1 つの場所に配置できるようにしたいと考えています。その文脈でそれ。

4

11 に答える 11

5

提供する直前に存在を確認したとしても、確認してから提供するまでの間に削除される可能性があります。

ここでの問題は、ファイルを提供できない場合、何も送り返さないことです。存在しないファイルを提供しようとすると、例外 (またはプラットフォームで同等のもの) がスローされます。適切な「申し訳ありませんが、ファイルが見つかりませんでした」というエラー ページを返すことで、その例外を処理する必要があります。

于 2008-10-15T15:15:37.027 に答える
3

そこにないファイルが例外的な状況である場合(データベースは常に正しいと言うように)、それをチェックするべきではありません。

そこにない場合は、例外が発生し、それに応じて処理します。それがシステムの仕組みだとおっしゃっているようで、私はそのように扱います。

もう1つ注意してください。開いたときにファイルが存在しないと言っているのは何も返さないということです。それは、例外処理に設計上の欠陥があり、下位レベルが適切に処理されるのに十分なほど例外をバブルしていないことを示していますエラーメッセージをクライアントに返すことができます。

適切な例外処理/バブリングを使用すると、別のアセットを問題なく返すことができます。システムが動作するはずの方法を再設計するのではなく、例外処理を再考してください。

于 2008-10-15T15:15:18.460 に答える
1

ある種の非常に奇妙なストレージ スキームを使用していない限り、深刻なパフォーマンスの問題が発生することはありません。

于 2008-10-15T15:14:26.200 に答える
1

このアプローチでパフォーマンスに大きな問題があることは認識していませんが、ファイルを開く前にファイルの存在をチェックすると、予期しない結果が生じる可能性があります (チェックしてから開くまでの間に別のプロセスがファイルを削除する可能性があります)。

于 2008-10-15T15:14:44.280 に答える
0

それが安いか高いかはわかりませんが、ファイルの存在を確認しないとクライアントに不快な反応を与える可能性があることを考えると、それほど高くはないと思います。

ファイルの存在を確認する Web アプリがいくつかあり、問題なく動作しています。

于 2008-10-15T15:16:05.107 に答える
0

ファイルにリダイレクトしていますか、それともコードを介してファイルの内容を読み取って提供していますか?

最初の場合、何らかの理由でファイルが存在しない場合はどうなりますか? 標準の 404 エラーですか、それとも特別なエラー ページがありますか? その場合、それは受け入れられますか?

後者の場合は、単にファイルを開いて例外を適切に処理します。

于 2008-10-15T15:17:07.833 に答える
0

ファイル IO は一般に、データベースやメモリ内の読み取りに比べてコストがかかりますが、システム クラッシュや未処理の例外を探し出すときに、「データベースには情報が保存されているので、間違っているべきではない」という古い話を何度も耳にしました。したがって、パフォーマンス要件が異常に高くない限り、存在を確認してエレガントに回復します。

于 2008-10-15T15:17:33.543 に答える
0

ファイルをチェックしないことでユーザーが混乱したり、必要なものが提供されなかったり、少なくとも問題を示すエラー メッセージが表示されたりする場合は、コストがいくらであっても問題ありません。

アプリケーションにはチェックが必要です。

于 2008-10-15T15:18:28.033 に答える
0

パフォーマンスに関しては、基本的に影響はありません。ここでの遅い部分は、ファイル ヘッダーを読み取るためにディスクに移動することですが、ファイルをロードする場合はとにかくそれを行う必要があり、適切なストレージ システム (過去数十年のほぼすべて) は実際にファイルを開いたときに読み取りの一部がはるかに高速になるように、チェックからの読み取りをキャッシュします。そうは言っても、ファイルが一般的にそこにあると予想される場合は、ファイルが存在しない例外をキャッチして適切に処理する方が一般的に良いというmattlantに同意します。

于 2008-10-15T15:18:59.360 に答える
0

直後に開く場合、その存在を確認するのは基本的に無料です。

于 2008-10-15T15:19:29.203 に答える
0

ファイルを開いてストリーミングしてみてください。その可能性はありますか?そうすれば、それを開いてストリーミングできない場合は、送信できず、適切なエラー処理を行うことができます。

于 2008-10-15T15:20:50.930 に答える