在阅读 , 这听起来像一个伟大的想法,以存放的文件使用SHA-1的目录。

我不知道这是什么意思不过,我所知道的是,沙-1和MD5散列算法。如果我的计算SHA-1散列使用 这红宝石的脚本, 和我改变该文件的内容(其改变hash),我怎么知道那里的文件存储然后呢?

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

如果所有文件被更改的内容一切的时候,是否有一个更好的解决方案用以储存,或者你只需要不断更新的哈?

我只是在思考如何创建一个通用的文件存储系统,如GoogleDocs、Flickr Youtube,保管箱,等等, 东西,你可以重复使用在不同的环境下(例如储存 PubMed 杂志的文章或 Cramster 家庭作业和试验,或者只是图像喜欢上Flickr).我可能会将它们储存在亚马逊EC2。只是一些系统所以我可以说"这是怎么了我99%的时间内做到的文件存储从现在",这样我就可以停止思考关于建立一个固体/一致的方式储存文件和得到的一些实际问题。

有帮助吗?

解决方案

首先,如果该文件的内容正在发生变化,文件从沙摘要的做法是不是很合适的,因为该名称和位置的文件在文件系统就必须改变时,该文件的内容变化。


基本上你的第一个计算SHA-1或MD5digest(=散列值)的内容的文件。

当你有一个摘要,例如, 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9, 你生成文件的位置和文件从摘要。例如,你可分割的前几个字符从摘要到目录结构和其他人物的文件名称。例如:

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

这样你只需要存储SHA-1摘要文件的数据库。然后你可以随时找出正确的地点和名称的文件。

目录通常还具有最大数量的文件可以含有,例如最大的32000子目录和文件目录。一个目录的结构基于这样的散列,使它不太可能存放太多的文件同样的目录。还使用哈希喜欢这个确保每个目录具有约同样数量的文件,你不会得到情况的所有文件都是在相同的目录中。

其他提示

这个想法是 更改该文件的内容,而是它的名称(和道路),通过使用一散列值。

改变的内容与a hash将是灾难性的,因为一散列通常是不可逆转的。

我不知道的motivivation使用 哈希 而不是文件的名称(或者甚至相当于一个漫长的随机数),但这几个优点的散列appraoch:

  • 文件名盘上是均匀的
  • 上或下部件的散列值可以用来名称的目录,因此分发的文件比较uniformely
  • 名字变成一个编码,使得很难有人来 a)猜的文件名 b)进行分类图片(会有人偷走的硬盘驱动器的内容)
  • 能够检索文件和位置,从本文件的内容本身(假设的散列来自这样的内容。(不是很确定其使用情况将涉及这个...一位contrieved...)

普遍利益的使用的散列的是,不同的文件名称中,散列是毫无意义,因此一需要的数据库涉及的图像和"书目"类型的数据(名片上传,日期的上传、标签,...)

在考虑这个问题,重新阅读被引用因此响应,我真的不见得多的一个优势的散列,与之相比,也就是说,一个随机号码...

此外...一些哈希产生一个数值,通常表示十六(见refernced这样的问题),这可以被看作是浪费的,通过使该文件的名字的时间比他们需要,并因此投入更多的压力在文件系统(更大的目录...)

这个想法是,你需要拿出一个姓名的照片,而你可能想要散发的文件,其中一些目录。一个简单的方法来与一个独特的名称是使用的散列。

那么开始的散列剥离一个多级目录的结构,其余的散列是用于一个名为jpg。

这具有额外的益处的检测重复上传。

一个优点,我看到储存的文件,使用他们的散列是该文件的数据,只有需要储存一旦然后可以引用的多次在你的数据库。这将保存你的空间如果你有一个不同的用户上传完全相同的文件。

但是这样做的缺点是当一个用户删除他们认为什么是有文件应用程序,可不只是身体上删除的文件的磁盘,因为其他用户传的同一精确的文件仍可以使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top