我有一个代码,它使用Roaring64NavigableMap
作为 neo4j 插件,使用 Neo4J API 中的getId()
节点的长值。
我想使用Chronicle-Map。我看到这个例子:
ChronicleSet<UUID> uuids =
ChronicleSet.of(Long.class)
.name("ids")
.entries(1_000_000)
.create();
- 如果我不知道要预期多少值怎么办?
.entries(1_000_000)
是否限制缓存或数据库最大输入数 - 有没有办法处理大约十亿个条目的大量数据?
- 有没有更有效的方法来创建
Chronicle-Map
? - 我可以控制它使用的缓存的大小吗?
- 我可以控制存储数据库的卷吗?
如果我不知道要预期多少值怎么办? .entries(1_000_000) 是否限制缓存或 DB 最大条目数
从 Javadoc ofentries()
方法:
数,这些条目将插入到此生成器创建的哈希容器中。如果
ChronicleHashBuilder.maxBloatFactor(double)
配置为 1.0(这是默认的),则此条目数也是最大值。如果尝试插入的条目数超过配置的 maxBloatFactor 乘以给定的条目数,则可能会引发IllegalStateException
。此配置应表示处于稳定状态的预期最大条目数 maxBloatFactor - 异常突发期间的最大膨胀系数。
更准确地说 - 尝试配置条目,以便创建的哈希容器将处理大约 99% 的请求,这些请求的大小小于或等于此数量的条目。
您不应在实际目标条目数上留出额外的保证金。这种不良做法被接受容量的
HashMap.HashMap(int)
和HashSet.HashSet(int)
构造函数所推广,应乘以荷载系数以获得实际的最大预期条目数。ChronicleMap
和ChronicleSet
没有载客率的概念。
因此,除非您指定maxBloatFactor(2.0)
(或 10.0 等),否则这是最大条目数。目前,编年史地图不支持"我真的不知道我会有多少条目;也许 1;也许是10亿;但我想创建一个地图,它将有机地增长到所需的大小"。这是一个已知的限制。
有没有办法处理大约十亿个条目的大量数据?
是的,如果您有足够的内存量。尽管具有内存映射,但 Chronicle Map 并非设计为在数据量明显大于内存时高效工作。在这种情况下,请使用LMDB或RocksDB或类似的东西。