java搜索大型文本文件
我有一个文本文件,以键/值的形式由约4000万行组成,我希望在最多几秒钟(2-3)内检索给定键的值,我没有足够的内存将它们作为哈希映射存储在JVM内存中,我可以使用系统存储+一些索引来实现这一点吗? 我一直在读关于lucene的书,但不确定这是否是我想要的
你可以在下面搜索框中键入要查询的问题!
我有一个文本文件,以键/值的形式由约4000万行组成,我希望在最多几秒钟(2-3)内检索给定键的值,我没有足够的内存将它们作为哈希映射存储在JVM内存中,我可以使用系统存储+一些索引来实现这一点吗? 我一直在读关于lucene的书,但不确定这是否是我想要的
# 1 楼答案
我认为Hadoop对于这项任务来说是一个更好的工具:只需在从属文件之间分割原始文件。map函数对原始文件的每个部分执行搜索,reduce是所有结果的组合。如果钥匙是唯一的,则只有一个从机提供答案
# 2 楼答案
Lucene用于自由文本搜索。如果不必使用文本文件,最快的解决方案是使用数据库。4000万条记录非常多,但即使如此,使用唯一索引(在键上)查找单个记录的速度也应该比2-3秒快得多。您可以使用HSQLDB之类的嵌入式数据库,只需确保将其配置为使用磁盘存储即可
如果您需要保留文本文件,如果您有能力将其存储在内存中,请在文件中创建一个从键到偏移量的树映射。听起来很乱
# 3 楼答案
如果要在键或值中搜索“文本字符串”,可以使用Apache LuceneLucene是一个功能齐全的文本搜索引擎库,但是您也可以简单地使用它来搜索键值的精确匹配项。我使用Lucene处理超过6000万个文档,每次搜索时间不到1秒
否则,如果您只想要一个键/值存储,您可以使用类似Redis的NOSql键/值数据库,但我还没有尝试