我有一个文本文件,由一个键/值形式的~4000万行组成,我想在几秒钟内(2-3)max检索给定键的值,我没有足够的内存来将所有这些存储在JVM内存中作为hashmap,我可以使用系统存储+一些索引来实现吗? 我一直在读关于lucene的内容,但不确定它是否正在寻找。
答案 0 :(得分:1)
如果要在键或值中搜索“文本字符串”,可以使用Apache Lucene。 Lucene 是一个功能齐全的文本搜索引擎库,但您也可以使用它来搜索键值的完全匹配。我使用Lucene拥有超过6千万份文档,每次搜索都不到1秒。
否则,如果您只想 键 / 值商店,则可以使用NOSql键/值数据库,例如Redis,但我还没有尝试过。
答案 1 :(得分:0)
我认为Hadoop是一个更好的工具来完成这项任务:只需在奴隶之间拆分原始文件即可。 map函数正在对原始文件的每个部分执行搜索,reduce是所有发现的组合。如果键是唯一的,只有一个从站可以提供答案。
答案 2 :(得分:0)
Lucene用于免费文本搜索。如果您不必使用文本文件,最快的解决方案是使用数据库。 4000万条记录很多,但即使这样,使用唯一索引(在密钥上)查找单个记录也应该比2-3秒快得多。您可以使用像HSQLDB这样的嵌入式数据库,只需确保将其配置为使用磁盘存储!
如果您需要保留文本文件,请从key创建一个TreeMap,以便在您可以将其存储在内存中时将其偏移到文件中。听起来很乱。