0

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

我想使用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. 我可以控制存储数据库的音量吗?
4

1 回答 1

1

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

entries()方法的Javadoc:

配置要插入到此构建器创建的散列容器中的目标条目数。如果ChronicleHashBuilder.maxBloatFactor(double)配置为 1.0(默认情况下),则此条目数也是最大值。如果您尝试插入比配置的 maxBloatFactor 更多的条目,乘以给定的条目数,IllegalStateException 可能会被抛出。

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

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

您不应该在实际目标条目数上设置额外的保证金。这种不好的做法是由接受容量的构造函数推广的HashMap.HashMap(int)HashSet.HashSet(int)它应该乘以负载因子以获得实际的最大预期条目数。ChronicleMap并且ChronicleSet没有负载系数的概念。

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

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

是的,如果你有足够的内存。虽然是内存映射的,但 Chronicle Map 在数据量明显大于内存时无法高效工作。在这种情况下使用 LMDB 或 RocksDB 或类似的东西。

于 2019-06-06T17:25:34.920 回答