编程语言
首页 > 编程语言> > 在Java中将许多文件与多种模式进行匹配

在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