键值存储建议
问题内容:
我需要一个用于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在不牺牲速度的同时降低了数据存储的复杂性。
这肯定会给您带来巨大的内存和速度收益,同时又不会增加应用程序的复杂性。请享用!