2011-07-08 112 views
0

我struggeling找到一种有效的方式(< 0.5瑞典克朗)。只有所需的文件名的一小部分一个巨大的文件系统来搜索特定的文件。搜索/索引巨大的文件达

这里的情景:

考虑您对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,这 - 数字谁 - 是不能接受的;)

有什么建议?

在此先感谢!

+0

试试这个http://lucene.apache.org/java/docs/index.html –

回答

2

有没有什么办法可以提取数据到的一些描述数据库或指数(如Lucene的)?

这需要一段时间才能完成,但搜索后可以快得多。

+0

我,其实是想通过一个简单的提取所有的路径信息'找到-name'命令,并把它变成一个数据库,用包含的ID作为密钥。问题在于数据库中会有大约21.000.000个文档可能无法执行。但我会研究这一点。 – milchjieper

+0

如果配置正确,数据库或索引应该比文件系统更好。 – 2011-07-08 10:26:06

1

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

如果你希望它是比你需要缓存/索引的名称,并从内存看看他们更快。

顺便说一句:如果你有一个SSD RAID 6集,它可以执行IO速度不够快,扫描20K文件下0.5秒。

+0

我们现在正在尝试使用tmpfs进行一些工作,它具有相同的优点。但它仍然是一种解决方法。使用这种尺寸的固态硬盘对于“简单”的概念验证来说太昂贵了(尽管我知道这个数据量不再是POC了,但是嘿:顾客是王道 - 正如我们在德国说的那样)。 – milchjieper

+0

您可以在英国购买60 GB固态硬盘,最大查找时间为0.1 ms,价格不到80英镑。尝试使用软件实现相同的性能改进并不那么简单。 –