键值存储建议


问题内容

我需要一个用于Java的非常基本的键值存储。我从HashMap开始,但似乎HashMap的空间效率有些低下(我正在存储约2000万条记录,并且似乎需要约6GB
RAM)。

映射为Map<Integer,String>,因此我考虑使用GNU Trove
TIntObjectHashMap<byte[]>,并将映射值存储为ascii字节数组而不是String。

作为替代方案,是否存在仅需要添加jar文件,不立即将整个映射保存在RAM中并且仍然相当快的键值存储?


问题答案:

使用 Berkeley
DB

Berkeley DB将对象图,集合中的对象或 简单的二进制键/值数据直接存储在磁盘上的btree中
。这种简单,高效的方法消除了ORM解决方案中所有不必要的开销。Java开发人员使用直接持久层(DPL),使用存储信息来注释类,就像JPA一样。这种方法是熟悉,高效且快速的。DPL在不牺牲速度的同时降低了数据存储的复杂性。

这肯定会给您带来巨大的内存和速度收益,同时又不会增加应用程序的复杂性。请享用!