java中使用索引匹配字符串
我有两个字符串列表。第一个是姓名列表(6MB),第二个是句子列表(大约三百万句)。 我想从句子中找出每个名字。这需要几天的时间。 我使用模式匹配,还检查正则表达式,因为句子和名称是由用户生成的,不确定。 我怎样才能做得更快呢?我建议你看看。java中使用索引匹配字符串,java,string,performance,indexing,Java,String,Performance,Indexing,我有两个字符串列表。第一个是姓名列表(6MB),第二个是句子列表(大约三百万句)。 我想从句子中找出每个名字。这需要几天的时间。 我使用模式匹配,还检查正则表达式,因为句子和名称是由用户生成的,不确定。 我怎样才能做得更快呢?我建议你看看。 一旦数据加载到其中,它可以在几分钟内给你一个答案。它支持类似SQL的语法和谓词中的正则表达式。因此,您可以将句子加载到其中,并使用where子句中的单词发出查询 最棒的是,与所有云服务一样,它不需要数据库管理技能,也不需要任何维护工作。当然,你需要为这些美好
一旦数据加载到其中,它可以在几分钟内给你一个答案。它支持类似SQL的语法和谓词中的正则表达式。因此,您可以将句子加载到其中,并使用where子句中的单词发出查询 最棒的是,与所有云服务一样,它不需要数据库管理技能,也不需要任何维护工作。当然,你需要为这些美好付出代价 我用这个工具用正则表达式搜索了3亿条包含多个文本列的记录,得到的答案通常不到一分钟
需要注意的一个重要警告是:此数据库不支持数据更新(不支持更新或删除记录)。它非常适合静态数据—日志文件、历史记录等。另一个重要的警告当然是数据在云中,不受您的控制。将名称列表存储在提供快速查找的数据结构中(如哈希表、BST等)。Java为它们中的许多提供了库 现在遍历句子列表并查找已创建名称数据结构中的每个标记。它将节省每次遍历名称列表的时间。尽管如此,它在单线程上仍然需要时间,但可以很容易地并行化 您可以创建多个线程(根据您的计算资源)来执行相同的任务,但从不同的位置开始读取句子文件
对于更复杂的并行化,我建议使用这样的框架,它在内存中进行计算,并使任务轻松扩展到任意数量的线程。一个合适的数据库可能会更快。我在数据库中拥有所有内容。我不知道如何使用索引来搜索和匹配字符串。要阅读的源代码也可以帮助我。而不是创建一个执行此任务的查询。它应该比用java做任何事情都要快得多。你可以尝试对名称进行哈希运算,然后尝试查找每个单词是否都存在哈希,而不是模式匹配。@KevinEsche这个句子,其实不是一个句子。它是数据库中记录的所有文本信息。名称列表中的名称不完全在文本中,因为文本是由用户生成的,并且它们不完全相同。你能给我推荐一个我能理解你意思的推荐人吗?我不允许把我的数据放在云端!真可惜。这个产品非常适合你的要求