标签:java chronicle chronicle-map
我正在玩ChronicleSet,它由ChronicleMap支持.我已经进行了一些初步测试,对我们的需求来说非常好.与其他解决方案相比,RAM使用效率更高,访问时间稍慢,但仍然非常快.
但是,我正在测试的一件事是设置最大条目数,它似乎没有按预期工作.
我正在使用以下代码:
ChronicleSetBuilder<Long> postalSetBuilder =
ChronicleSetBuilder.of(Long.class)
.name("long-map")
.entries(2_000_000L)
.maxBloatFactor(1.0);
根据文档,这意味着在这种情况下允许的最大条目数为2M.但是,在测试时,我可以可靠地提高到指定的最大值的2倍,然后再增加一点,直到得到如下异常:
Error: ChronicleMap{name=city-postal-codes-map, file=null, identityHashCode=3213500}: Attempt to allocate #129 extra segment tier, 128 is maximum.
Possible reasons include:
- you have forgotten to configure (or configured wrong) builder.entries() number
- same regarding other sizing Chronicle Hash configurations, most likely maxBloatFactor(), averageKeySize(), or averageValueSize()
- keys, inserted into the ChronicleHash, are distributed suspiciously bad. This might be a DOS attack
在这种情况下,对size()的ChronicleMap对象调用吐出4,079,238.所以我想知道如何设置一个明确的限制(例如上面指定的2M),并让Chronicle可靠地拒绝任何在此之后添加其他元素的请求.
解决方法:
无法配置确切的特定条目限制,因为没有共享的分段存储,因此没有单个条目计数器.为了使编年史地图无法接近配置的entry()限制,您应该配置allowSegmentTiering(false).
标签:java,chronicle,chronicle-map 来源: https://codeday.me/bug/20191025/1931107.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。