【问题标题】:Embeddable disk-based key-value store可嵌入的基于磁盘的键值存储
【发布时间】:2012-02-04 07:02:24
【问题描述】:

我们正在开发一个项目,该项目将使用单个 jar 文件进行分发。我们需要一些具有以下属性的键值对存储:

  1. 可嵌入到我们的 jar 文件中,因此无需额外安装。
  2. 最多可容纳数千万对
  3. 内存高效。这意味着 50M 对小于 100M
  4. 键和值都是简单类型:long、int、small byte[]
  5. 商业用途的免费许可是奖励
  6. 我们不需要并发、ACID 或此类高级的东西。
  7. 平均查找时间低于 100 微秒。

除了 BerkelyDB 或 JDBM2/3 之外还有什么建议吗?

【问题讨论】:

    标签: java data-structures key-value-store


    【解决方案1】:

    GNU Trove 提供了许多比标准 Java 映射更节省内存的映射(例如 TIntIntHashMap),因为它们使用原始类型。我怀疑除非您对所存储的内容有所了解,否则您能否获得比这更高的内存效率。 Trove 是more or less LGPL,所以它对你来说可能是安全的。我不知道它是否特别符合您的确切规格,但我认为当您可以将东西放入 RAM 时值得一试。

    当您可能需要交换到磁盘时,Ehcache 是一个不错的选择。您可以指定在一定数量的条目后它将值存储在磁盘上(在 2.5 版中,如果您不知道确切的条目数,您可以在使用一定数量的 RAM 后指定)。

    【讨论】:

    • 而 EhCache 是...出乎意料的 :) 我的意思是,我先验地认为通用缓存解决方案会带来太多开销。但是......“衡量,而不是猜测”,所以谢谢你提醒我:)
    【解决方案2】:

    看看 noSQL 实现,CouchDB、Cassandra 等等都不错。

    谷歌搜索比较,你会找到你想要的。

    我最喜欢的是 mongoDb,不幸的是它不是基于 Java 的

    问候

    【讨论】:

    • 我不知道为什么该解决方案被否决,通过 Cassandra 可以实现数百万行,并且不仅限于 ram。而不是 Trove(每次发布后都会破坏 api == 坏),以及具有实时同步的良好 lusk,FastUtil 实际上更好。但是,无论什么作品都可以。
    • 我找不到任何可嵌入的 noSQL。所有这些都需要单独安装。
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2011-04-20
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多