在Java中将许多文件与多种模式进行匹配
作者:互联网
这是我要执行的操作:一方面,我有一个文本文件,带有〜100.000字符串模式(每个String在新行中),其中大多数长度约为40-200个字符.另一方面,我有〜130.000个文件,大小从几千字节到具有几百兆字节的大文件(但是95%的文件只有几百KB).
现在,我想将130k文件中的每个文件与所有100k模式中的文件进行匹配.
现在我正在使用.contains()方法进行匹配,这是一些示例代码:
String file = readFile(somefile.pdf); // see benchmark below
String[] patterns = readFile(patterns.txt).split("\n"); // read 100k patterns into an array
for(int i = 0; patterns.length-1; i++){
if(file.contains(patterns[i])){
// pattern matched
}else{
// patttern not matched
}
}
我在相当强大的桌面系统(4core 2.9ghz,4GB内存,SSD)上运行此程序,但性能却很差:
当somefile.pdf是1.2mb的文件时,与所有100k模式的匹配大约需要43秒.
400kb是〜14秒. 50kb的文件约为2秒
这太慢了,我需要40x-50x倍的性能.我能做什么?
解决方法:
在这13万个文件上创建搜索索引可能是最可持续的方法.
在这里回答了类似的问题:Searching for matches in 3 million text files
Java环境中通常使用的库/工具:
> Lucene
> Solr
>弹性搜索
标签:bigdata,string,java,algorithm,pattern-matching 来源: https://codeday.me/bug/20191122/2060106.html