我在这方面的经验可能已经过时了(NTFS),但是您应该检查在包含 30,000 个文件的目录中打开一个文件的速度有多快。我想您可能会发现最好将文件分布在更多目录中。
如果您可以控制目录布局,请考虑将文件名散列为 0 到 660000 之间的数字。然后您可以使用文件系统作为索引:
00/
00/
<99 files that hash here>
..
65
Run Code Online (Sandbox Code Playgroud)
您仍然需要编写一个简单的“索引器”来读取每个文件,计算其哈希并将其存储在正确的位置。然后您可以按以下方式查找文件:
Lookup(string filename)
{
int hash = filename.GetHashCode() % 660000;
string directory = HashToDirectory(hash);
string path = Path.Combine(directory, filename);
...
Run Code Online (Sandbox Code Playgroud)
这种方法的好处之一是您可以分析目录中文件数量的各种“密度”。你只要改变一下HashToPath
功能就可以了。您也不需要数据库。
我们对存储大量文件的网络爬虫使用了类似的方法。它是针对 NTFS 的,所以 YMMV。
归档时间: |
|
查看次数: |
6448 次 |
最近记录: |