有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java搜索大型文本文件

我有一个文本文件,以键/值的形式由约4000万行组成,我希望在最多几秒钟(2-3)内检索给定键的值,我没有足够的内存将它们作为哈希映射存储在JVM内存中,我可以使用系统存储+一些索引来实现这一点吗? 我一直在读关于lucene的书,但不确定这是否是我想要的


共 (3) 个答案

  1. # 1 楼答案

    我认为Hadoop对于这项任务来说是一个更好的工具:只需在从属文件之间分割原始文件。map函数对原始文件的每个部分执行搜索,reduce是所有结果的组合。如果钥匙是唯一的,则只有一个从机提供答案

  2. # 2 楼答案

    Lucene用于自由文本搜索。如果不必使用文本文件,最快的解决方案是使用数据库。4000万条记录非常多,但即使如此,使用唯一索引(在键上)查找单个记录的速度也应该比2-3秒快得多。您可以使用HSQLDB之类的嵌入式数据库,只需确保将其配置为使用磁盘存储即可

    如果您需要保留文本文件,如果您有能力将其存储在内存中,请在文件中创建一个从键到偏移量的树映射。听起来很乱

  3. # 3 楼答案

    如果要在键或值中搜索“文本字符串”,可以使用Apache LuceneLucene是一个功能齐全的文本搜索引擎库,但是您也可以简单地使用它来搜索值的精确匹配项。我使用Lucene处理超过6000万个文档,每次搜索时间不到1秒

    否则,如果您只想要一个/存储,您可以使用类似Redis的NOSql键/值数据库,但我还没有尝试