当前位置: 首页 > 知识库问答 >
问题:

MaxSizeConfig size with PER\u节点策略

沈翰
2023-03-14

MaxSizeConfig是否损坏?我希望map最多包含2000个条目,然后才开始逐出旧条目,然而,当我插入2000个条目时,我得到340个逐出。

@Bean
public Config hazelCastConfig() {
    Config config = new Config();
    config.setProperty("hazelcast.logging.type", "slf4j");
 // config.setProperty("hazelcast.partition.count", "2");

    MapConfig mapConfig = new MapConfig()
            .setBackupCount(0)
            .setName("map")
            .setEvictionPolicy(EvictionPolicy.LRU)
            .setMaxSizeConfig(new MaxSizeConfig(2000, MaxSizeConfig.MaxSizePolicy.PER_NODE))
            .addEntryListenerConfig(new EntryListenerConfig(new ExampleEntryListener(), false, true));
    config.addMapConfig(mapConfig);

    return config;
}

找到有关逐出的公式:https://docs.hazelcast.org/docs/3.12/manual/html-single/index.html#understanding-地图逐出

分区最大大小=最大大小*成员计数/分区计数

在我的例子中,它是分区计数=271,成员计数=1(运行嵌入了hazelcast实例的spring-boot应用程序)。因此,要保证存储2000个,最大大小需要:

最大大小=分区最大大小*分区计数/成员计数

最大尺寸=2000*271/1=471000

471000对于只有2000个条目来说似乎太大了。当我设置max-size=6000 hazelcast时,似乎至少保留了2000个条目。

问题:我的配置/公式有什么问题?如何将hazelcast配置为每个节点严格保存X个条目。因此,当应用程序部署为(1个节点用于测试,2个节点用于PRELIVE)时,hazelcast形成了由2个(或1个)成员组成的集群,集群中有2000个条目,而不是更多,而不需要使用奇特的公式计算任何内容,只需指定2000个?

共有1个答案

洪楚
2023-03-14

以下是使用PER_NODE配置最大大小时发生的情况:

configuredEntrySize=2000,每个节点

totalEntrySize=configuredEntrySize*memberCount(2000用于测试环境,4000用于PRELIVE)

默认情况下,您有271个分区

<代码>perPartitionEntrySize=totalEntrySize/partitionCount(7用于测试环境,14用于PRELIVE)

当您将条目放入映射时,hazelcast会找出应该使用键的散列来存储条目的分区(\u键%partitionCount的散列)。如果您的数据不是完全一致的,那么在某些分区中会存储7个以上的条目,从而导致逐出。

您可以将Hazelcast IMap看作一个映射数组,数组的大小是分区计数。每个成员存储此数组的某些部分。假设MemberA存储map-0、map-3、map-6。。。MemberB存储map-1、map-4、map-7。。。MemberC存储map-2、map-5、map-8。。。Hazelcast使用键的散列从该数组中选择一个映射,并将您的条目存储在此选定的映射中。当您调用IMap时。size()向每个成员发送一个操作,收集这些映射的所有大小,并作为总数返回。由于每次逐出检查都这样做是次优的,因此Hazelcast会根据您配置的内容计算每个分区的最大大小,并将该数字用作每个贴图的最大大小。

 类似资料:
  • 我有简单的xml文件,有一个或多个节点,例如: 有没有可能,使用函数,对于一个节点的文件(如上所述)得到: 使用[0]键,与具有更多节点的xml文件类似,而不是: 因为接下来我需要将它转换为具有相同深度的数组,无论是来自具有一个或多个节点的文件

  • 我在C:/Users/user/AppData/Roaming/npm/node_modules路径中拥有所有节点模块。然后我尝试为我的脚本网页包含带有巴别塔和巴别塔预设的node_模块。 我的webpack.config.js 但巴贝尔并没有看到2015年。我也这么认为。 命令重新执行以下命令: 请帮忙。错在哪里?

  • 我有一个在Node开发的API。JS,打字稿听localhost:3001我有一个Angular的前端应用程序,打字稿听localhost:4200 我正在尝试使用ngx-image-cropper上传图像文件,将其转换为base 64,从前端到API。 当补丁(更新)http请求发送到API时,我得到: 访问位于'http://localhost:3001/member/10'从原点'http:

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • Text 节点的概念 文本节点(Text)代表元素节点(Element)和属性节点(Attribute)的文本内容。如果一个节点只包含一段文本,那么它就有一个文本子节点,代表该节点的文本内容。 通常我们使用父节点的firstChild、nextSibling等属性获取文本节点,或者使用Document节点的createTextNode方法创造一个文本节点。 // 获取文本节点 var textNo

  • Text节点的概念 Text节点的属性 data wholeText length nextElementSibling previousElementSibling Text节点的方法 appendData(),deleteData(),insertData(),replaceData(),subStringData() remove() splitText(),normalize() Docu