2

画像を配信するWebサービスを作成しました。常に一方向の通信になります。画像は、サービスから取得する側で変更されることはありません。

複数のソースがあり、接続が悪い場合は遠くにあるものもあります。そのためのメモリキャッシュを作成しましたが、画像を長期間保存するためにディスクキャッシュも必要です。これを行うための最善のアプローチについては少しわかりません。

まず、私のソースはすべてWebサーバーであるため、使用したい画像の最終更新日(例として)をチェックして、ファイルが変更されているかどうかを確認する方法がわかりません。

次に、ローカルキャッシュを最適に保存するにはどうすればよいですか?ファイルをフォルダにドロップして、日付を元のソースと比較するだけですか?または、ファイルのチェックを避けるために、すべてのタイムスタンプをすべての画像とともにtxtファイルに保存することもできます。または、ローカルSQL Express DBに保存しますか?

一般的に、画像はそれほど大きくありません。ほとんどが約200kbです。ただし、時々、7MB以上になります。大きな問題は、サービスがホストされる場所の一部が非常に悪い接続にあり、同じイメージを何度も使用する必要があることです。実際のパフォーマンス要件はありません。中央サーバーへの接続がひどい場所では、可能な限り応答性を高めたいと考えています。

「実際の」キャッシュシステムをインストールできません。それは私が自分のコードで処理できるものでなければなりません。

4

1 に答える 1

2

サーバーにプロキシサーバーをインストールし、それを介してすべてのリモートWebサーバーにアクセスしてみませんか?プロキシサーバーがキャッシュを処理します。

編集:何もインストールできず、利用可能なデータベースがないため、ディスクキャッシュを自分で実装することに固執しているのではないかと思います。

良いニュースは、比較的簡単なことです。フォルダを選択して、そこに画像ファイルを配置する必要があります。また、画像IDとファイル名の間に一意のマッピングが必要です。画像IDが数字の場合、マッピングは非常に簡単です...

画像のリクエストを受け取ったら、まずディスク上で画像を確認します。それがそこにあるなら、あなたはすでにそれを持っています。そうでない場合は、リモートサーバーからダウンロードして保存し、そこから提供します。

同時リクエストを考慮する必要があります。ファイルをディスクに書き込むのは比較的簡単なプロセスであることを確認してください(ダウンロードが完了したら、ファイルを書き込むことができます)。ファイルをディスクに書き込むときは、誰もファイルを開いて読み取れないようにしてください。そうすれば、不完全なファイルを送信しないようにできます。

ここで、ファイルがキャッシュにない場合を処理する必要があり、ファイルに対する2つの要求が同時に受信されます。パフォーマンスが実際の問題ではない場合は、2回ダウンロードするだけです。

于 2012-10-16T06:30:42.243 に答える