tso*_*tsi 6 java performance dictionary
我正处于Java项目的中间,该项目将使用单词的"大字典"."字典"是指分配给字符串的某些数字(int).而'big'我的意思是一个100 MB的文件.我提出的第一个解决方案可能是最简单的.在初始化时,我读入整个文件并创建一个大的HashMap,稍后将用于查找字符串.
有没有一种有效的方法可以在初始化时无需读取整个文件?也许不是,但如果文件真的很大,那么按照可用RAM的顺序呢?所以基本上我正在寻找一种在存储在内存中的大型字典中有效查找内容的方法.
感谢到目前为止的答案,结果我意识到我可以在我的问题中更具体.您可能已经猜到应用程序与文本挖掘有关,特别是以稀疏向量的形式表示文本(尽管有些人有其他创造性的想法:)).因此,对于使用至关重要的是能够在字典中查找字符串,尽可能快地获取其密钥.只要字符串查找时间得到优化,"读取"字典文件或将其索引到数据库中的初始开销就不那么重要了.再说一次,我们假设字典大小很大,与可用RAM的大小相当.
考虑非复制模式ChronicleMap(https://github.com/OpenHFT/Chronicle-Map )。它是一个堆外 JavaMap实现,或者从另一个角度来看,它是一个超轻量级的 NoSQL 键值存储。
它对您开箱即用的任务有何用处:
\n\nint或者long值只需要 4(8) 个字节,就像您有原始专用的映射实现一样。HashMap和ConcurrentHashMap