现有的基于文件的java.util.Map实现

时间:2011-04-26 13:36:01

标签: java b-tree map

我正在开发一个使用自定义Map< String,Entry>的项目。 (其中Entry是一对int)实现基于B-tree来存储10到1亿条记录,这个类的代码很慢而且很脏。我需要有效地实现Map,它使用文件存储和少量内存。

我搜索并发现Java版本的Berkeley DB有java.util.Collection API(包括Map),但为此目的使用完全成熟的数据库似乎是多余的(它使用带有许多文件的目录,还有几个额外的线程管理)。有更简单的解决方案吗?

3 个答案:

答案 0 :(得分:2)

我最近遇到了同样的问题,看了太阳下的一切,包括NoSQL和缓存。您需要基于磁盘/文件/支持的hashmap。

Berkeley DB Java版是迄今为止最好的。它快速,可扩展且完整,但如果不分发源代码或从Oracle购买商业版本,则无法将其分发给客户。

除了重新发明轮子之外,唯一的另一个选择是JDBM2。它还有一个hashmap和一个树形图。您有责任定期刷新到磁盘以防止OutOfMemoryError,并且它不像Berkeley DB那么快,但它是一个非常好的第二选择。

答案 1 :(得分:1)

查看Kyoto Cabininet,一个磁盘支持的DBM实现。我已经使用了以前的版本Tokyo Cabinet - 它很容易使用,基本上就像本地Map一样,非常快。

答案 2 :(得分:1)

JDBM是一个轻量级的纯Java B-Tree实现。