我正在开发一个使用自定义Map< String,Entry>的项目。 (其中Entry是一对int)实现基于B-tree来存储10到1亿条记录,这个类的代码很慢而且很脏。我需要有效地实现Map,它使用文件存储和少量内存。
我搜索并发现Java版本的Berkeley DB有java.util.Collection API(包括Map),但为此目的使用完全成熟的数据库似乎是多余的(它使用带有许多文件的目录,还有几个额外的线程管理)。有更简单的解决方案吗?
答案 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实现。