在Java中用Chronicle-Map替换Roaring64NavigableMap的正确方法是什么?



我有一个代码,它使用Roaring64NavigableMap作为 neo4j 插件,使用 Neo4J API 中的getId()节点的长值。

我想使用Chronicle-Map。我看到这个例子:

ChronicleSet<UUID> uuids =
ChronicleSet.of(Long.class)
.name("ids")
.entries(1_000_000)
.create();
  1. 如果我不知道要预期多少值怎么办?.entries(1_000_000)是否限制缓存或数据库最大输入数
  2. 有没有办法处理大约十亿个条目的大量数据?
  3. 有没有更有效的方法来创建Chronicle-Map
  4. 我可以控制它使用的缓存的大小吗?
  5. 我可以控制存储数据库的卷吗?

如果我不知道要预期多少值怎么办? .entries(1_000_000) 是否限制缓存或 DB 最大条目数

从 Javadoc ofentries()方法:

配置目标条目

数,这些条目将插入到此生成器创建的哈希容器中。如果ChronicleHashBuilder.maxBloatFactor(double)配置为 1.0(这是默认的),则此条目数也是最大值。如果尝试插入的条目数超过配置的 maxBloatFactor 乘以给定的条目数,则可能会引发IllegalStateException

此配置应表示处于稳定状态的预期最大条目数 maxBloatFactor - 异常突发期间的最大膨胀系数。

更准确地说 - 尝试配置条目,以便创建的哈希容器将处理大约 99% 的请求,这些请求的大小小于或等于此数量的条目。

您不应在实际目标条目数上留出额外的保证金。这种不良做法被接受容量的HashMap.HashMap(int)HashSet.HashSet(int)构造函数所推广,应乘以荷载系数以获得实际的最大预期条目数。ChronicleMapChronicleSet没有载客率的概念。

因此,除非您指定maxBloatFactor(2.0)(或 10.0 等),否则这是最大条目数。目前,编年史地图不支持"我真的不知道我会有多少条目;也许 1;也许是10亿;但我想创建一个地图,它将有机地增长到所需的大小"。这是一个已知的限制。

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

是的,如果您有足够的内存量。尽管具有内存映射,但 Chronicle Map 并非设计为在数据量明显大于内存时高效工作。在这种情况下,请使用LMDB或RocksDB或类似的东西。

相关内容

最新更新