寻找一个轻量级的java兼容的内存键值存储

Berkeley DB可能是最好的选择,但由于许可问题我无法使用它。

还有其他选择吗?

你可以试试Hazelcast 。 只需将hazelcast.jar添加到您的类路径中即可。 并开始编码

java.util.Map map = Hazelcast.getMap("myMap"); 

您将获得一个内存,分布式,动态可扩展的数据网格,其执行速度非常快。

你的问题可能意味着两件事之一。

如果您指的是用于存储键值对的数据结构,请使用作为JDK标准部分的Map实例之一。

但是,如果您是在内存中的键值存储之后,那么我建议您查看EHCache甚至是memcached 。

哈希地图 ?

Chronicle-Map是一个很好的选择。

  • 纯Java,只需java.util.Map实现
  • 将数据存储在堆外,可选择通过内存映射文件持久保存到磁盘
  • 开源,允许的Apache 2.0许可证
  • 非常快,每秒可以管理数百万次更新/查询( 参见确切数字 )

jdbm非常适合这种事情。 它旨在存储在分页文件中的磁盘上,提供基本的事务支持(不保证隔离,但涵盖了ACD)。 我们在部署相当广泛的生产系统中使用它,并且对性能,稳定性等非常满意……

考虑使用jredis 。 它是Redis的Java客户端,Redis是一个持久的键值存储。 还有一个JDBC驱动程序:code.google.com/p/jdbc-redis/。

我知道这是一个两年的post,但我最近一直在搞乱Infinispan ,到目前为止我都喜欢它。 我无论如何都不是专家,但对我来说设置带有几个节点的分布式缓存并不困难,我在大约一个小时内从它们中提取了一些数据。

MapDb是Berkley的替代品,具有友好的Apache 2许可证。

  • 通过java的Map接口提供键值存储
  • 轻巧(300KBjar)
  • 快速和线程安全
  • 如果您愿意,可以保留对磁盘的更改
  • 许多其他function

有轻量级或嵌入式数据库,如HSQLDB,Derby,SQLite但是像其他人一样不明白为什么需要数据库存储键/值…

为什么不是地图? 需要在重启时保持键/值吗?

此外,它可能不是你需要的,但在最新的浏览器上使用html5你有localStorage允许你使用javascript在浏览器中存储键/值。

我建议尝试Redisson 。 您将能够在高性能键值Redis服务器之上使用分布式和可伸缩的MapConcurrentMap以及其他(Set,List,Queue,Lock …)实现。

简单的例子:

 Redisson redisson = Redisson.create(); ConcurrentMap map = redisson.getMap("anyMap"); ... redisson.shutdown();