2011-01-27 64 views

回答

10

你可以看看Disk-Backed-map项目。

实现在Java中

一个小型图书馆提供用于存储大量的键值对的磁盘支持Map实现磁盘备份映射库。对于非常简单的键/值对,映射实现(HashMap,HashTable)最多可产生3-4百万个键/ GB的内存,并且在大多数情况下,该限制要低得多。另一方面,无论键/值对的大小如何,DiskBacked映射都可以存储16M(64位JVM)至20M(32位JVM)键/ GB之间的映射。

+0

这是从他们的网站准确的报价,但它一定是错的。 64位JVM比32位JVM具有更小的集合是没有意义的。 – 2015-09-09 09:28:16

1

您可以使用简单的EHCache实现吗? EHCache的好处是,它可以可以很容易实现:-)

我认为你已经排除序列化/反序列化实际的Map实例?

+0

是的,我已经排除了。我不想永远记住整个事情。 – jjujuma 2011-01-27 11:27:33

+0

Isnt EHCache支付了吗?有没有免费版本 – 2012-02-08 19:11:06

6

如果您正在寻找基于key-object的结构来保存数据,那么NoSQL数据库是一个非常好的选择。您会发现其中一些如MongoDBRedis可以扩展并执行大数据集,除了基于散列的查找功能外,它们还提供有趣的查询和事务功能。

实质上,这些类型的系统是一个Map实现。并且实施您自己的适配器以实现java.util.Map以弥合它们不应该太复杂。

5

创建mapdb(mapdb.org)不正是你所期待的。除了磁盘支持的TreeMap和HashMap以外,它还提供了其他集合类型。

它的地图也是线程安全的,并有非常好的性能。

Features

0

Chronicle Map是一个现代和the fastest解决这个问题。它实现了ConcurrentMap接口并将数据保存到磁盘(引擎盖下,它通过将Chronicle Map的内存映射到文件来完成)。