【问题标题】:Looking for a lightweight java-compatible in-memory key-value store [closed]寻找一个轻量级的java兼容的内存键值存储[关闭]
【发布时间】:2011-02-04 04:55:22
【问题描述】:

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

还有其他选择吗?

【问题讨论】:

  • @Stephen C:欢迎您编辑并提供更好的解释。关于“讽刺地回应”:对我来说,Berkeley DB 的替代品是 HashMap 听起来很奇怪。
  • upvoting - 问题似乎是合法的,并没有那么多讽刺。鉴于,问题可能从一开始就说明哈希图不会削减它。
  • OK @Roman ... DO 你在下面的评论中所说的“//sarcasam”是什么意思??
  • 为什么不检查 nosql-database.org --> Key Value / Store 部分并为自己找到答案。使用 IMDG,也可以是 Key Value Store,让您可以选择扩展

标签: java nosql berkeley-db key-value-store


【解决方案1】:

我建议尝试Redisson。您将能够在高性能键值对 Redis 服务器之上使用分布式和可扩展的 MapConcurrentMap 和其他(Set、List、Queue、Lock ...)实现。

简单示例:

Redisson redisson = Redisson.create();

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");

...

redisson.shutdown();

【讨论】:

    【解决方案2】:

    Chronicle-Map 是一个强有力的选择。

    • 纯 Java,只需 java.util.Map 实现
    • 在堆外存储数据,可选择通过内存映射文件持久化到磁盘
    • 开源、宽松的 Apache 2.0 许可
    • 速度极快,每秒可管理数百万次更新/查询 (see exact numbers)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 轻量级? mvn copy-dependencies 为 mapdb:3.0.5 收集了大约 14 MB
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              为什么不是地图? 需要在应用重启时保留键/值?

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

              【讨论】:

                【解决方案9】:

                您的问题可能意味着以下两种情况之一。

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

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

                【讨论】:

                • @cletus : hashmap 不使用内存键值存储吗?
                【解决方案10】:

                【讨论】:

                • 它缺乏事务管理和将一些数据保留在磁盘中和另一部分在内存中等等的可能性.. //sarcasm
                • 啊,我明白了 :) 不久前有人想为 Android 开发东西但需要使用存储支持的哈希图,因为他的数据太大了。类似的东西,我猜。
                猜你喜欢
                • 2010-12-04
                • 2010-10-09
                • 2010-09-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-05-08
                相关资源
                最近更新 更多