2

小さな画像ホスティングを使用していますが、多くの重複コンテンツがあることに気付きました。新しくアップロードされたファイルがハッシュされ、既存の画像ハッシュデータベースと比較され、既に存在する場合は削除され、ユーザーに既存の画像リンクが表示されるチェックサムまたはハッシュコードを使用して、将来この問題を解消したいと考えています。オールインワンインスタンス

私のセットアップは、最低限の Node.js+ jQuery File Upload +2 ディレクトリ (1 つはフォーラム アップロード用、もう 1 つは直接 Web アップロード用) です。

各ディレクトリに数千または数百万のファイルが存在する可能性がある場合、これを行うのに最適な(高速で信頼性の高い)ハッシュとデータベースのセットアップは何ですか? MD5 または SHA1 はやり過ぎで、多くのリソースを必要とする可能性があると思います。もっと簡単な解決策があれば知りたいです。

統計 :
~1,000 の画像が毎日アップロード
~400 kb の平均画像サイズ
~35,000 サーバー内の画像
~30% の重複コンテンツ (MD5 を使用してテスト)

4

2 に答える 2

0

MD5 は実際には非常に高速で、ユース ケースには十分な速さです。1 つの逸話的なベンチマークでは、単一の CPU で 1 秒あたり約 400 メガバイトです ( source )。サーバー処理のボトルネックにはならず、重複ファイルをチェックする信頼できる方法です。MD5 は衝突攻撃に対して脆弱ですが、念入りに準備する必要があります。偶然の衝突は統計的に不可能です。あなたのアプリケーションでは、衝突はそれほど大きな問題にはならないように思えます (ただし、いずれにせよ衝突を処理するようにしてください)。

信頼性を除外して本当に速度が必要な場合は、CRC を使用できます。バイトストリーム内のエラーを検出するためだけに、真のハッシュを意図したものではありません。100万分の1程度の比較的高い衝突率を持っています。ただし、非常に高速です。ルーター上のハードウェアに実装されることを意図しています。

于 2012-09-24T10:51:06.733 に答える
0

次のアプローチはどうでしょうか。

  • ユーザーが画像をアップロードすると、MD5 サムが作成されます
  • 画像は、その MD5 サムをファイル名として使用して保存されます
  • 元のイメージ名も FS に保存されますが、MD5 名を指すシンボリック リンクとして保存されます。
  • ユーザーが重複した画像をアップロードした場合、MD5 名が既に存在するかどうかを確認し、シンボリック リンクを作成するだけです。

既存の画像をその構造に変換するには、 を使用したかなり単純なシェル スクリプトmd5sumでうまくいくmvと確信していますln -s

もう 1 つの可能性は、MongoDB のようなものを使用してイメージを DB に格納することです。これは、クラスター化しやすい可能性があります。

于 2012-09-24T10:51:58.260 に答える