它们是Java的Map的任何体面的磁盘实现吗?

时间:2011-01-27 11:17:33

标签: java collections

我正在寻找java.util.Map的磁盘实现。没有什么太花哨的东西,只是我可以指向一个目录或文件并让它以其选择的某种方式将其内容存储在那里。有谁知道这样的事情?

6 个答案:

答案 0 :(得分:10)

您可以查看Disk-Backed-map项目。

  

在Java中实现磁盘支持的映射的库

     

一个小型库,提供用于存储大量键值对的磁盘支持的映射实现。对于非常简单的键/值对,地图实现(HashMap,HashTable)最大可以输出大约3-4百万个键/ GB内存,并且在大多数情况下,限制要低得多。另一方面,DiskBacked地图可存储16Million(64位JVM)至20Million(32位JVM)密钥/ GB,无论密钥/值对的大小如何。

答案 1 :(得分:6)

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

本质上,这些类型的系统是Map实现。并且实现自己的适配器实现java.util.Map来桥接它们不应该太复杂。

答案 2 :(得分:5)

MapDB(mapdb.org)完全符合您的要求。除了磁盘支持的TreeMap和HashMap,它还为您提供了其他集合类型。

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

请参阅Features

答案 3 :(得分:1)

您可以使用简单的EHCache实现吗?关于EHCache的优点是可以实现起来非常简单: - )

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

答案 4 :(得分:0)

对于这个问题,这似乎是一个相对较新的开源解决方案,我已经使用过它,并且到目前为止一样

https://github.com/jankotek/JDBM4

答案 5 :(得分:0)

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