首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java中的纪事地图代替Roaring64NavigableMap的正确方法是什么?

用Java中的纪事地图代替Roaring64NavigableMap的正确方法是什么?
EN

Stack Overflow用户
提问于 2019-06-05 18:34:29
回答 1查看 194关注 0票数 0

我有一个使用Roaring64NavigableMap作为neo4j插件的代码,该插件是使用来自Neo4J APIgetId()的节点的长值。

我想使用纪事图。我看到这个例子:

代码语言:javascript
复制
ChronicleSet<UUID> uuids =
    ChronicleSet.of(Long.class)
        .name("ids")
        .entries(1_000_000)
        .create();
  1. 如果我不知道该预测多少值呢?.entries(1_000_000)是否限制了缓存或企业的DB数?
  2. 是否有办法处理十亿个条目的大量数据?
  3. 是否有更有效的方法来创建Chronicle-Map
  4. 我能控制它使用的缓存的大小吗?
  5. 我能控制存储DB的卷吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 17:25:34

如果我不知道该预测多少值呢?.entries(1_000_000)是否限制缓存或DB条目数?

来自entries()方法的Javadoc:

配置要插入到此构建器创建的散列容器中的条目的目标数目。如果ChronicleHashBuilder.maxBloatFactor(double)被配置为1.0 (这是默认的),那么这个条目的数量也是最大的。如果尝试插入比配置的maxBloatFactor更多的条目,乘以给定的条目数,可能会引发IllegalStateException。 此配置应表示在异常突发期间处于稳定状态的预期最大条目数maxBloatFactor --最大膨胀系数。 更准确地说--尝试配置条目,这样创建的哈希容器将提供大约99%的请求,其大小小于或等于这个数目。 您不应该在实际的目标条目数量之上添加额外的空白。HashMap.HashMap(int)HashSet.HashSet(int)构造函数推广了这种糟糕的做法,它们接受容量,应该乘以负载因子,以获得实际的最大期望条目数。ChronicleMapChronicleSet没有负载因子的概念。

因此,这是条目的最大数量,除非您指定了maxBloatFactor(2.0) (或10.0等)。目前,纪事地图不支持“我真的不知道我会有多少个条目;可能有10亿个;但我想创建一个地图,它将有机地增长到所需的大小”。这是已知的限制。

是否有办法处理十亿个条目的大量数据?

是的,如果你有足够的内存。尽管内存映射,但当数据量明显大于内存时,记事地图并不能有效地工作。在这种情况下使用LMDB或RocksDB或类似的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56466187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档