我需要一个非常基本的 java 键值存储。我从 HashMap 开始,但似乎 HashMap 的空间效率有点低(我存储了大约 2000 万条记录,并且似乎需要大约 6GB RAM)。
map 是Map<Integer,String>
,所以我正在考虑使用 GNU Trove TIntObjectHashMap<byte[]>
,并将映射值存储为 ascii 字节数组而不是字符串。
作为替代方案,是否有一种键值存储只需要添加 jar 文件,不会立即将整个 map 保存在 RAM 中,并且速度仍然相当快?
最佳答案
BabuDB is an embedded non-relational database system. Its lean and simple design allows it to persistently store large amounts of key-value pairs without the overhead and complexity of similar approaches such as BerkeleyDB.
许可证:新 BSD 许可证,语言:Java
JDBM2 provides HashMap and TreeMap which are backed by disk storage.
许可证:Apache License 2.0,语言:Java
Banana DB is a self-contained key/value pair database implemented in Java.
许可证:Apache License 2.0,语言:Java
我已经尝试过 BabuDB 和 JDBM2,它们运行良好。 BabuDB 的设置有点困难,但可能提供比 JDBM2 更高的性能。
这些都是所有数据库,允许持久数据在磁盘上。还有在内存中保存大 map 的解决方案(ehcache、hazelcast、...)。
关于java - 键值存储建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639080/