将包含大量文件的目录sorting到子目录的名称是什么?

一种使pipe理大量文件的目录可pipe理的方法是将文件分类到以文件名称中的渐进字符命名的子目录中。

例如:

 -  a8debcdcf0d2302ccde5a43bb1fb385e81098342.jpg
 -  91ff48de8cfc6468bdc2115cf87cfb6547eee713.jpg
 -  99d002e2065cdf02bd6d04bf29a8230564719b76.jpg
 ...

上面的文件被分类到子目录,类似于这个:

 - 一个/
   -  8 /
     -  a8debcdcf0d2302ccde5a43bb1fb385e81098342.jpg
 -  9 /
   -  1 /
     -  91ff48de8cfc6468bdc2115cf87cfb6547eee713.jpg
   -  9 /
     -  99d002e2065cdf02bd6d04bf29a8230564719b76.jpg

这种方法有几种变化,例如使用不同数量的字符来命名子目录,或使用散列或其他algorithm来确定每个文件的path。

这种组织文件的方法是否有正式的名称?

我一直称它为散列组合。

有这样的结构要记住一些事情:

  • 每个目录创build一个inode。 如果你对每个字符进行块化,一个文件可能会导致创build33个inode。 在用完这些空间之前,您将耗尽inode。
  • 如果你对组进行分组(比如说,前n个字符,后面跟着第二个n个字符),保持足够小的集合,不要强制inode扩展,这将会减慢查找速度。
  • 如果你的散列是显着的随机的,第三个和更多的顺序块实际上将永远不会有兄弟姐妹,所以你可能能够像… 1234/5678 / 901234567890etc块,并保持你的inode小。

它似乎只是被称为“哈希目录结构”,例如在http://michaelandrews.typepad.com/the_technical_times/2009/10/creating-a-hashed-directory-structure.html

在访问期间如何保持高水平的性能,如何存储大量文件? 一种解决scheme是文件名散列。

它被称为B-Tree (与二叉树无关)。