题
不Java有(或者是有一个图书馆提供),允许我有一个盘根据哈希?它不需要原子或什么,但它将可以通过多个线程和不应该的崩溃,如果两个被访问的同样的元件,在同一时间。
任何人知道为什么吗?
解决方案
要么 性文件 或 Berkeley DB 可能是你要找的。的 java.util.Properties
本身实现 java.util.Map
并提供方法 load
从和 store
文件。Berkeley DB往往是被推荐作为一个轻便的关键值对数据存储库。
其他提示
<强>创建mapdb 强>
创建mapdb提供并发TreeMap和HashMap的背靠磁盘存储或关断堆存储器。它是一种快速,可扩展性和易于使用的嵌入式Java数据库引擎。它是挤满了功能,例如事务,空间高效串行化,例如高速缓存和透明压缩/加密。它也有出色的表现仅由天然嵌入分贝发动机媲美。
<强> jdbm2 强>
嵌入式密钥值的Java数据库。
像你声音需要的东西接近一个轻量级的分贝。你看/被认为的Java DB?光分贝一个单一的,索引表将基本上是一个基于磁盘的,线程安全哈希映射。
JDBM2 是你问什么。它提供了磁盘存储备份(其他地图中)一个HashMap。其快速,线程安全的,API是非常简单的。
项目伏地魔也是非常快/可扩展的/复制 “哈希映射”。它是在LinkedIn使用的性能也相当好:
一个报价从他们的网站:
下面是可以通过我们从看到 单多线程客户交谈 单个服务器,其中“热”数据 集在存储器下人为地 在我们的性能实验室重载:
读取:19384请求/秒,点击 写:16559请求/秒
所以,今年是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
我还看了: