用于存储文件的 SHA-1 哈希值

Lan*_*ard 1 ruby sha1 file-storage

阅读本文后,使用 SHA-1 目录存储文件听起来是个好主意。

我不知道这意味着什么,但我只知道 SHA-1 和 MD5 是哈希算法。如果我使用此 ruby​​ 脚本计算 SHA-1 哈希值,并且更改文件的内容(这会更改哈希值),那么我如何知道文件的存储位置?

那么我的问题是,实现 SHA-1/文件存储系统的基础知识是什么?

如果所有文件都一直在更改内容,是否有更好的解决方案来存储它们,或者您只需要不断更新哈希值?

我只是在考虑如何创建一个通用的文件存储系统,例如 GoogleDocs、Flickr、Youtube、DropBox 等,您可以在不同的环境中重用它(例如存储PubMed 期刊文章或Cramster作业和测试,或者只是图片如 Flickr 上)。我可能会将它们存储在 Amazon EC2 上。只是一些系统,这样我就可以说“从现在开始,我将在 99% 的时间里进行文件存储”,这样我就可以不再考虑构建可靠/一致的方式来存储文件并解决一些实际问题。

Juh*_*älä 5

首先,如果文件的内容发生变化,SHA-digest 方法的文件名不太合适,因为当文件内容发生变化时,文件系统中文件的名称和位置也必须发生变化。


基本上,您首先根据文件内容计算 SHA-1 或 MD5 摘要(= 哈希值)。

当您有摘要时,例如 ,00e4f56c0de1c61fdb926e79e8a0a65bd12930c9您可以从摘要中生成文件位置和文件名。例如,您将摘要中的前几个字符拆分为目录结构,并将其余字符拆分为文件名。例如:

 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9 => some/path/00/e4/f5/6c0de1c61fdb926e79e8a0a65bd12930c9.txt
Run Code Online (Sandbox Code Playgroud)

这样您只需将文件的 SHA-1 摘要存储到数据库即可。然后您始终可以找到文件的正确位置和名称。

目录通常还具有可包含的最大文件数,例如每个目录最多 32000 个子目录和文件。基于这种散列的目录结构使得您不太可能将太多文件存储到同一目录中。还使用这样的散列确保每个目录具有大约相同数量的文件,您不会遇到所有文件都在同一目录中的情况。