【问题标题】:How to configure Hazelcast MapStore chunk sizes?如何配置 Hazelcast MapStore 块大小?
【发布时间】:2015-05-07 21:25:54
【问题描述】:

使用以下配置

<map name="event">
    <in-memory-format>OBJECT</in-memory-format>
    <backup-count>1</backup-count>
    <map-store enabled="true" initial-mode="EAGER">
        <class-name>xxx.EventMapStore</class-name>
        <write-delay-seconds>5</write-delay-seconds>
        <write-batch-size>5000</write-batch-size>
    </map-store>
</map>

和一个直接的 MapStore 实现 Hazelcast 以块大小从持久存储中加载/存储条目,这似乎是它自己确定的。在单个节点上,密钥大小约为 20K(所有这些都由 loadAllKeys 一次很好地加载),它存储在大约 200 个块中,一次加载大约 80 个(每次调用的大小都不同)。这是一场性能噩梦。

write-batch-size 和 write-delay-seconds 似乎对存储都没有影响。设置高级属性 hazelcast.map.load.chunk.size 似乎也对加载块大小没有任何影响。

如何实现用于加载/存储的自定义块大小?

而且(只是出于兴趣)如何为每个加载/存储确定这个动态块大小?

加载中的一些日志(第一行来自 loadAllKeys,然后是分块,Hazelcast 自己开始执行...):

2015-05-08 00:08:14 DEBUG EventMapStore:220 - Loading entire key-batch of 19876
2015-05-08 00:08:15 DEBUG EventMapStore:149 - Loading event-batch of 55
2015-05-08 00:08:17 DEBUG EventMapStore:149 - Loading event-batch of 78
2015-05-08 00:08:18 DEBUG EventMapStore:149 - Loading event-batch of 79
2015-05-08 00:08:19 DEBUG EventMapStore:149 - Loading event-batch of 72
2015-05-08 00:08:20 DEBUG EventMapStore:149 - Loading event-batch of ...

我想可以将其配置为例如加载 5000 个块并以相同的批量大小存储......对吗?

【问题讨论】:

  • 显然为 JVM 分配更多内存(更多)会增加批处理大小。它仍然不符合配置,但已经接近。无论如何,分配的内存大小在生产中的实际预期投影时看起来很可怕......

标签: hazelcast


【解决方案1】:

Hazelcast 将数据拆分为分区,并由每个分区处理加载过程。由于默认分区计数为 271,因此每个分区将有大约 73 (20K/271) 个条目,小于批量大小。 使用较小的批量大小(小于 73)查看它是否按预期工作

【讨论】:

  • 感谢您的努力!它与分区大小没有任何关系。通过为 JVM 分配更多的初始内存,我设法将写入批次提高到几千个,将读取批次提高到几百个。但是,我仍然不明白它背后的数学原理。
  • 是什么让您认为分区计数不相关?您是否尝试过将hazelcast.partition.count 设置为不同的值?这是一个代码-sn-p,它演示了分区计数是相关的。尝试将其设置为 1、2、10 并相应地更改 hazelcast.map.load.chunk.sizegist.github.com/gurbuzali/b1e347833fcb5af6c729
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多