搜索/索引大量文件

时间:2011-07-08 09:58:00

标签: java filesystems io

我很想找到一种有效的方法(< 0.5 sek)来搜索只有一小部分所需文件名的庞大文件系统中的特定文件。

以下是该方案:

考虑您有大约15.000.000个文件,所有文件都按其信息类型分类,其中包含编号目录中的批处理,每个文件包含20.000个文件:

DATA
--TYPE_1_001
----ID_1234567_TYPE1.XML
----ID_2345678_TYPE1.XML
----[...]
--TYPE1_002
--[...]
--TYPE_1_097
--TYPE_2_001
----ID_1234567_TYPE2.JPG
----ID_2345678_TYPE2.JPG
----ID_2345679_TYPE2.JPG
----[...]
--[...]
--TYPE2_304
--[...]

等等。

因此,鉴于ID(即1234567),我正在尝试查找包含所述ID的所有相关文件名。 这个“查找过程”将针对另一个XML文件中给出的每个7.000.000个ID执行。

当前流程需要405天才能处理所有7.000.000个ID,其中 - 谁的数字 - 是不可接受的;)

有什么建议吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

有什么方法可以将数据提取到某些描述的数据库或索引(如Lucene)中吗?

这需要一些时间,但一旦可用,搜索速度会快得多。

答案 1 :(得分:1)

使用SSD驱动器而不是硬盘驱动器。常规硬件每秒只能执行大约120 IO。这是因为头部必须移动到存储信息的位置。由于没有移动部件,快速SSD驱动器cna每秒执行10,000次IO操作。然而,即使使用SSD驱动器,最多只需要2秒钟来扫描每个目录的名称。

如果你想要比它更快,你需要缓存/索引名称并从内存中查找它们。

顺便说一句:如果您设置了SSD Raid 6,它可以足够快地执行IO,以便在0.5秒内扫描20K文件。