不Java有(或者是有一个图书馆提供),允许我有一个盘根据哈希?它不需要原子或什么,但它将可以通过多个线程和不应该的崩溃,如果两个被访问的同样的元件,在同一时间。

任何人知道为什么吗?

有帮助吗?

解决方案

要么 性文件Berkeley DB 可能是你要找的。的 java.util.Properties 本身实现 java.util.Map 并提供方法 load 从和 store 文件。Berkeley DB往往是被推荐作为一个轻便的关键值对数据存储库。

其他提示

<强>创建mapdb

创建mapdb提供并发TreeMap和HashMap的背靠磁盘存储或关断堆存储器。它是一种快速,可扩展性和易于使用的嵌入式Java数据库引擎。它是挤满了功能,例如事务,空间高效串行化,例如高速缓存和透明压缩/加密。它也有出色的表现仅由天然嵌入分贝发动机媲美。

http://www.mapdb.org/

<强> jdbm2

嵌入式密钥值的Java数据库。

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

像你声音需要的东西接近一个轻量级的分贝。你看/被认为的Java DB?光分贝一个单一的,索引表将基本上是一个基于磁盘的,线程安全哈希映射。

JDBM2 是你问什么。它提供了磁盘存储备份(其他地图中)一个HashMap。其快速,线程安全的,API是非常简单的。

项目伏地魔也是非常快/可扩展的/复制 “哈希映射”。它是在LinkedIn使用的性能也相当好:

一个报价从他们的网站:

  

下面是可以通过我们从看到   单多线程客户交谈   单个服务器,其中“热”数据   集在存储器下人为地   在我们的性能实验室重载:

     

读取:19384请求/秒,点击    写:16559请求/秒

编年史地图 实现了 ConcurrentMap 和仍然存在数据的磁盘通过映射它的存储器文件。

编年史地图是在概念上非常类似于MapDB(提供了类似的建设者和API Map 接口),但是纪事报地图 倍的速度 比MapDB和具有更好的并发(记载地图上使用的高度条纹的多级旋锁).

所以,今年是2016年,现在如果有人的面色来解决这个问题,我发现在的 Xodus从JetBrains的适用于这个相同的目的,使用他们的商店computeInTransaction lambda表达式。

当然,它不是光滑为具有纯Map实例,但它的工作对我的使用情况。

最近的另一个选择是使用 H2的MVStore存储引擎它做同样的事情,但我认为这是对数据库本身更适合。

干杯!

2018 最轻的持久性 key value 商店是 H2 数据库及其 MVStore:

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

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

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

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

  • 它的目标是速度快、使用简单且体积小。

  • 支持并发读写操作。

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

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

H2 也包含在一个库中 1.8 meg

我还看了:

  • 地图数据库 (13 meg 依赖项)
  • 编年史地图 (5.5 meg 依赖项 - 快速可选分布式)
  • lmdbjava (2 meg java 依赖项 + lmdb C 库) - 最快的实现,但不是 thread safe 盒子外面。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top