基于磁盘的HashMap

syn*_*nic 33 java data-persistence

Java是否有(或者是否有可用的库)允许我拥有基于磁盘的HashMap?它不需要是原子或任何东西,但它将通过多个线程访问,如果两个同时访问同一个元素,则不应该崩溃.

谁知道什么?

小智 31

创建mapdb

MapDB提供由磁盘存储或堆外内存支持的并发TreeMap和HashMap.它是一个快速,可扩展且易于使用的嵌入式Java数据库引擎.它具有诸如事务,节省空间的序列化,实例缓存和透明压缩/加密等功能.它还具有与本机嵌入式数据库引擎相媲美的出色性能.

http://www.mapdb.org/

jdbm2

嵌入式键值Java数据库.

https://code.google.com/p/jdbm2/


Bal*_*usC 11

无论是属性文件Berkeley DB的可能是你在找什么.它java.util.Properties本身实现java.util.Map并提供loadstore文件到文件的方法.Berkeley DB通常被推荐为轻量级键值对数据存储区.


Stu*_*all 9

2018最轻的持久性key value存储是H2数据库与它的MVStore

MVStore 是一个持久的、日志结构的键值存储。它计划成为 H2 的下一个存储子系统,但它也可以直接在应用程序中使用,无需使用 JDBC 或 SQL。

  • MVStore 代表“多版本商店”。

  • 每个商店都包含许多可以使用 java.util.Map 接口访问的地图。

  • 支持基于文件的持久性和内存中操作。

  • 它旨在快速、易于使用且体积小。

  • 支持并发读写操作。

  • 支持事务(包括并发事务和两阶段提交)。

  • 该工具非常模块化。它支持可插拔数据类型和序列化、可插拔存储(到文件、到堆外内存)、可插拔映射实现(当前 B 树、R 树、并发 B 树)、BLOB 存储和文件系统抽象到支持加密文件和zip文件。

h2-mvstore没有依赖项,版本 1.4.200 是一个0.3 Mb 的jar

我还看了:

  • MapDB13 meg依赖项)
  • 编年史地图5.5 meg依赖项 - 快速可选地分发)
  • lmdbjava2 megjava 依赖项 + lmdbC 库)- 最快的实现,但不是thread safe开箱即用的。


Pau*_*sik 7

听起来你需要一些接近轻量级数据库的东西.您是否看过/考虑过Java DB?具有单个索引表的轻型数据库基本上是基于磁盘的线程安全哈希映射.


And*_*ejs 7

JDBM2正是您所要求的.它提供了由磁盘存储(以及其他映射)备份的HashMap.它的快速,线程安全和API非常简单.


lev*_*tov 6

Chronicle MapConcurrentMap通过将其内存映射到文件来实现并将数据持久化到磁盘。

Chronicle Map 在概念上与 MapDB 非常相似(提供类似的构建器 API 和Map接口),但 Chronicle Map比 MapDB几倍,并且具有更好的并发性(Chronicle Map 使用高度条带化的多级自旋锁)。


Alf*_*red 5

伏地魔项目也是一个非常快速/可扩展/复制的“哈希图”。在LinkedIn上使用,性能也不错:

摘自他们网站的一段话:

这是我们从与单个服务器通信的单个多线程客户端看到的吞吐量,其中“热”数据集在我们的性能实验室中人为重负载下位于内存中:

读取:19,384 请求/秒
写入:16,559 请求/秒