java - 键值存储建议

标签 java nosql

我需要一个非常基本的 java 键值存储。我从 HashMap 开始,但似乎 HashMap 的空间效率有点低(我存储了大约 2000 万条记录,并且似乎需要大约 6GB RAM)。

map 是Map<Integer,String> ,所以我正在考虑使用 GNU Trove TIntObjectHashMap<byte[]> ,并将映射值存储为 ascii 字节数组而不是字符串。

作为替代方案,是否有一种键值存储只需要添加 jar 文件,不会立即将整个 map 保存在 RAM 中,并且速度仍然相当快?

最佳答案

BabuDB

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

JDBM2 provides HashMap and TreeMap which are backed by disk storage.

许可证:Apache License 2.0,语言:Java

Banana DB

Banana DB is a self-contained key/value pair database implemented in Java.

许可证:Apache License 2.0,语言:Java


我已经尝试过 BabuDB 和 JDBM2,它们运行良好。 BabuDB 的设置有点困难,但可能提供比 JDBM2 更高的性能。

这些都是所有数据库,允许持久数据在磁盘上。还有在内存中保存大 map 的解决方案(ehcachehazelcast、...)。

关于java - 键值存储建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639080/

相关文章:

java - BufferedWriter 不写入所有信息

java - 为什么类称为对象的抽象?

java - 拆分 SurfaceView - Android/Java

ruby-on-rails - 保持elasticsearch和数据库同步

database - 不守规矩的磁盘使用,不会缩水

java - 这个格式字符串有什么问题?

java - 如果事件是从另一个监听器发布的,则忽略 TransactionalEventListener

nosql - DynamoDB 错误 : "Query key condition not supported"

python - Aerospike - Python 客户端 - NoSQL 基准测试

sql - 小于大于过滤查询,aerospike