【问题标题】:Indexing files and quickiest way to find a file in folders?索引文件和在文件夹中查找文件的最快方法?
【发布时间】:2010-08-22 05:07:44
【问题描述】:

我在 22 个文件夹中有 660000 个 xml 文件(具有唯一文件名)。每个文件夹有 30000 个文件。我需要在 C# 应用程序中通过名称有效地找到它们。我知道 Windows 中有一个 SearchIndexer 服务(?Vista+?),我只是想知道我是否可以使用它或者我必须自己索引文件?

或者,我想我可以创建一个数据库,文件名是另一列中的主键和路径。但是,我应该创建一个包含 660000 行的表还是 22 个每个包含 30000 行的表?为什么?

提前致谢。

【问题讨论】:

    标签: c# xml file directory


    【解决方案1】:

    我在这方面的经验可能已经过时 (NTFS),但您应该检查在包含 30,000 个文件的目录中打开文件的速度。我认为您可能会发现将文件分布在更多目录中会更好。

    如果您可以控制目录布局,请考虑将文件名散列为 0 到 660000 之间的数字。然后您可以将文件系统用作索引:

    00/
      00/
        <99 files that hash here>
    ..
    65
    

    您仍然需要编写一个简单的“索引器”来读取每个文件,计算其哈希值并将其存储在正确的位置。然后,您将文件查找为:

    Lookup(string filename)
    {
       int hash = filename.GetHashCode() % 660000;
       string directory = HashToDirectory(hash);
       string path = Path.Combine(directory, filename);
       ...
    

    这种方法的一个好处是,您可以针对目录中的文件数量分析各种“密度”。您只需更改 HashToPath 函数。您也不需要数据库。

    我们对存储 很多 文件的网络爬虫使用了类似的方法。它是针对 NTFS 的,所以是 YMMV。

    【讨论】:

      【解决方案2】:

      Querying the Index Programmatically:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 2014-04-17
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        相关资源
        最近更新 更多