java性能优化在文件系统中搜索数据
我有一个与网络相关的存储,其中大约有500万个txt文件,与大约300万个事务相关。总数据量约为3.5 TB。我必须在该位置搜索,以确定交易相关文件是否可用,并且必须制作两份单独的报告,作为CSV文件“可用文件”和“不可用文件”。我们是 仍在Java6中。我面临的挑战是,因为我必须递归地在该位置搜索,由于规模巨大,我在该位置搜索平均需要2分钟左右。我使用JavaI/OAPI进行递归搜索,如下所示。有什么方法可以提高性能吗
File searchFile(File location, String fileName) {
if (location.isDirectory()) {
File[] arr = location.listFiles();
for (File f : arr) {
File found = searchFile(f, fileName);
if (found != null)
return found;
}
} else {
if (location.getName().equals(fileName)) {
return location;
}
}
return null;
}
# 1 楼答案
您应该采取不同的方法,而不是每次搜索文件时遍历整个目录,而是创建一个索引,它是从文件名到文件位置的映射
基本上:
既然已经有了索引,搜索文件就变得很简单了
现在地图中已经有了这些文件,甚至可以使用集合操作来查找交点:
或者,如果索引本身太大,无法保存在内存中,则可能需要在SQLite数据库中创建索引
# 2 楼答案