我有数以百万计的音频文件,基于GUId (http://en.wikipedia.org/wiki/Globally_Unique_Identifier)生成。如何将这些文件存储在文件系统中,以便有效地将更多的文件添加到同一个文件系统中,以及可以高效地搜索以找到特定的文件。而且,将来它应该是可伸缩的。
文件是基于GUId (唯一的文件名)命名的。
Eg:
1 63f4c070-0ab2-102 d-adcb-0015f22e2e5c
2 ba7cd610-f268-102c-b5ac-0013d4a7a2d6
3 d03cf 036-0ab2-102 d-adcb-0015f22e2e5c
4 d3655a36-0ab3-102 d-adcb-0015f22e2e5c
Pl。给出你的看法。
PS:,我已经读过< Storing a large number of images >了。我需要特定的data-structure/algorithm/logic,以便将来也可以成为可伸缩的。
EDIT1:文件的数量大约在1-2百万,文件系统是ext3 (CentOS)。
谢谢,
纳文
发布于 2009-10-16 05:45:41
这很容易-建立一个基于GUID值部分的文件夹树。
例如,创建256个文件夹,每个文件夹都以第一个字节命名,并且只存储以该字节开头具有GUID的文件。如果在一个文件夹中仍然有太多的文件,那么在每个文件夹中对GUID的第二个字节执行相同的操作。如果需要,增加更多的级别。搜索文件将非常快。
通过选择用于每个级别的字节数,您可以有效地为您的场景选择树结构。
发布于 2009-10-16 05:45:28
我会尝试将每个目录中的文件#保持在一些可管理的数字上。最简单的方法是将子目录命名为GUID的前2-3个字符。
发布于 2018-08-30 00:58:04
构造n级深文件夹层次结构来存储文件。嵌套文件夹的名称将是对应文件名的前n个字节。例如:要将文件"63f4c070-0ab2-102d-adcb-0015f22e2e5c“存储在四层深文件夹层次结构中,请构造6/3/f/4并将该文件置于此层次结构中。层次结构的深度取决于您可以在系统中拥有的最大文件数。对于我的项目中的几百万个文件来说,4层深度层次结构工作得很好。
在我的项目中,我也做了同样的事情,有近100万个文件。我的要求也是通过遍历这个庞大的列表来处理这些文件。我构建了一个4层深文件夹层次结构,处理时间从近10分钟缩短到了几秒钟。
如果您想处理这些深文件夹层次结构中的所有文件,那么不必调用函数来获取前4个级别的列表,只需预先计算所有可能的4层深文件夹层次结构名称即可。假设guid可以有16个可能的字符,那么我们将在前四个级别上各有16个文件夹,我们只需预先计算16* 16 * 16 *16文件夹层次结构,这只需几毫秒。如果将这些大量文件存储在共享位置,并且调用函数以获取目录中的列表,则这将节省大量时间。
https://stackoverflow.com/questions/1576272
复制相似问题