【问题标题】:Existing File based implementation of java.util.Mapjava.util.Map 的现有基于文件的实现
【发布时间】:2011-08-13 01:35:19
【问题描述】:

我正在开发一个项目,该项目使用基于 B-tree 的自定义 Map(其中 Entry 是一对整数)实现来存储 10 到 1 亿条记录,该类的代码是又慢又脏。我需要高效实现 Map,它使用文件进行存储和少量内存。

我搜索并发现 Java 版的 Berkeley DB 有 java.util.Collection API(包括 Map),但为此目的使用完全成熟的数据库似乎是多余的(它使用包含许多文件的目录,有几个额外的线程用于管理)。有没有更简单的解决方案?

【问题讨论】:

    标签: java b-tree map


    【解决方案1】:

    看看Kyoto Cabininet,一个磁盘支持的 DBM 实现。我用过以前的版本,Tokyo Cabinet - 非常好用,基本上就像原生的Map,而且速度非常快。

    【讨论】:

    • 很好,但不提供 java.util.Map 接口(我有很多假设 Map 接口的代码)。
    • 为京都内阁数据库对象创建自定义 Map 包装器应该需要几分钟。
    【解决方案2】:

    JDBM 是一个轻量级的纯 Java B-Tree 实现。

    【讨论】:

      【解决方案3】:

      我最近遇到了同样的问题,并且查看了所有的东西,包括 NoSQL 和缓存。你想要一个基于磁盘/文件/支持的哈希图。

      Berkeley DB Java 版是迄今为止最好的。它快速、可扩展且完整,但您无法在不分发源代码或从 Oracle 购买商业版本的情况下将其分发给客户。

      除了重新发明轮子之外,唯一的其他选择是 JDBM2。它还有一个哈希图和一个树形图。您负责定期刷新到磁盘以防止 OutOfMemoryError,它的速度不如 Berkeley DB,但它是一个非常好的第二选择。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        相关资源
        最近更新 更多