1

これを読んだ後、ディレクトリに SHA-1 を使用してファイルを保存するのは素晴らしいアイデアのように思えます。

これが何を意味するのかはわかりませんが、SHA-1 と MD5 がハッシュ アルゴリズムであることだけはわかっています。この ruby​​ スクリプトを使用して SHA-1 ハッシュを計算し、ファイルの内容を変更すると (ハッシュが変更されます)、ファイルが保存されている場所をどのように知ることができますか?

私の質問は、SHA-1/ファイルストレージシステムを実装するための基本は何ですか?

すべてのファイルのコンテンツが常に変更されている場合、それらを保存するためのより良い解決策はありますか? それとも、ハッシュを更新し続ける必要がありますか?

GoogleDocs、Flickr、Youtube、DropBox など、さまざまな環境で再利用できる一般的なファイル保存システムを作成する方法を考えているところです ( PubMed ジャーナルの記事やCramster の宿題とテストの保存など)。 Flickr のような画像)。おそらくAmazon EC2に保存します。「これからは 99% の確率でこの方法でファイルを保存する」と言えるシステムがあるだけで、ファイルを保存するための堅実で一貫性のある方法を構築することを考えるのをやめて、いくつかの実際の問題に取り掛かることができます。

4

4 に答える 4

4

まず第一に、ファイルの内容が変更された場合、ファイル システム内のファイルの名前と場所を変更する必要があるため、SHA ダイジェスト アプローチからのファイル名はあまり適していません。


基本的に、最初にファイルの内容から SHA-1 または MD5 ダイジェスト (= ハッシュ値) を計算します。

などのダイジェストがある場合、ダイジェスト00e4f56c0de1c61fdb926e79e8a0a65bd12930c9からファイルの場所とファイル名を生成します。たとえば、ダイジェストの最初の数文字をディレクトリ構造に分割し、残りの文字をファイル名に分割します。例えば:

 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9 => some/path/00/e4/f5/6c0de1c61fdb926e79e8a0a65bd12930c9.txt

この方法では、ファイルの SHA-1 ダイジェストをデータベースに保存するだけで済みます。その後、いつでも正しい場所とファイルの名前を見つけることができます。

ディレクトリには、通常、含めることができるファイルの最大数もあります。たとえば、ディレクトリごとに最大 32000 のサブディレクトリとファイルがあります。この種のハッシュに基づくディレクトリ構造により、同じディレクトリに格納するファイルが多すぎる可能性が低くなります。また、このようなハッシュを使用して、すべてのディレクトリにほぼ同じ数のファイルがあることを確認してください。すべてのファイルが同じディレクトリにあるという状況にはなりません。

于 2009-11-22T17:26:05.737 に答える
2

アイデアは、ハッシュ値を使用して、ファイルの内容を変更するのではなく、その名前 (およびパス) を変更することです。

ハッシュは通常元に戻すことができないため、ハッシュを使用してコンテンツを変更すると悲惨な結果になります。

ファイル名ではなく(または長い乱数ではなく)ハッシュを使用する動機についてはよくわかりませんが、ハッシュアプ​​ローチのいくつかの利点を次に示します。

  • ディスク上のファイル名は統一されています
  • ハッシュ値の上部または下部を使用してディレクトリに名前を付けることができるため、ファイルを比較的均一に分散できます。
  • 名前がコードになり、誰かが a) ファイル名を推測するのが難しくなる b) 写真を分類する (誰かがハード ドライブの内容を盗むのではないか)
  • ファイルの内容自体からファイル名と場所を取得できるようにする (ハッシュがそのような内容から得られると仮定します。(どのユースケースがこれに関係するかはよくわかりません...少し不自然です...)

ハッシュを使用する一般的な利点は、ファイル名とは異なり、ハッシュは無意味であるため、データベースで画像と「書誌」タイプのデータ (アップローダーの名前、アップロード日、タグなど) を関連付ける必要があることです。

それについて考えて、参照されているSO応答を読み直しても、たとえば乱数と比較して、ハッシュの利点はあまり見られません...

さらに...一部のハッシュは、通常は16進数で表される数値を生成します(参照されているSOの質問に見られるように)。これは、ファイル名を必要以上に長くすることで無駄と見なされる可能性があり、したがって、ファイルシステム(より大きなディレクトリ...)

于 2009-11-22T17:20:01.690 に答える
1

ハッシュを使用してファイルを保存する利点の 1 つは、ファイル データを 1 回保存するだけで、データベース内で何度も参照できることです。これにより、別のユーザーがまったく同じファイルをアップロードしている場合に、スペースを節約できます。

ただし、これの欠点は、ユーザーがファイルがあると思うものをアプリから削除した場合です。まったく同じファイルをアップロードした他のユーザーがまだそれを使用している可能性があるため、ディスクからファイルを物理的に削除することはできません。

于 2011-02-10T20:48:03.160 に答える
1

アイデアは、写真の名前を考え出す必要があるということであり、おそらくファイルをいくつかのディレクトリに分散させたいと考えています。一意の名前を付ける簡単な方法の 1 つは、ハッシュを使用することです。

そのため、複数レベルのディレクトリ構造のためにハッシュの先頭が取り除かれ、残りのハッシュは jpg のファイル名に使用されました。

これには、重複アップロードを検出するという追加の利点があります。

于 2009-11-22T17:25:47.997 に答える