在java中使用索引匹配字符串

时间:2016-09-01 09:08:15

标签: java string performance indexing

我有两个字符串列表。第一个是名单(6MB),第二个是句子列表(大约三百万个句子)。 我想通过句子寻找每个名字。这需要几天时间。 我正在使用模式匹配并检查正则表达式,因为句子和名称是由用户生成的并且不确定。 我怎么能更快地完成它?

2 个答案:

答案 0 :(得分:1)

将名称列表存储在提供快速查找的数据结构中(如哈希表,BST等)。 Java为其中许多人提供了库。

现在遍历句子列表并查找创建的名称数据结构中的每个标记。它将节省每次遍历名称列表的时间。仍然需要花时间在单线程上,但可以很容易地并行化。

您可以创建多个线程(根据您的计算资源)执行相同的任务,但是开始从不同位置读取句子文件。

对于更复杂的并行化,我建议使用类似Apache Spark的框架,它在内存中进行计算,并使任务可以轻松扩展到任意数量的线程。

答案 1 :(得分:0)

我建议你看看Google BigQuery 一旦数据加载到其中,它可以在几分钟内给你答案。它支持谓词中类似SQL的语法和正则表达式。因此,您将句子加载到其中,并可以使用where子句中的单词发出查询。

最重要的是 - 与所有云服务一样,它不需要数据库管理技能,也不需要任何维护工作。当然,你需要为所有的善良付出代价。

我使用该工具搜索带有正则表达式的多个文本列的300M记录,并通常在一分钟内得到答案。

需要注意的一个重要警告:此数据库不支持更新数据(不更新或删除记录)。它非常适用于静态数据 - 日志文件,历史记录等。另一个重要的警告当然是数据在云中而不在您的控制之下。