如果我不知道要预期多少个值怎么办?.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 或类似的东西。