使用以下配置
<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个(每次调用时大小不同)。这是一场表演噩梦。
写入批量大小和写入延迟时间似乎都不会对存储产生影响。设置高级属性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的块加载并以相同的批量大小存储...对吗?
答案 0 :(得分:1)
Hazelcast将数据拆分为分区,并由每个分区处理加载进程。由于默认分区计数为271,因此每个分区将具有大约73(20K / 271)个条目,这小于批量大小。 使用较小的批量(小于73)来查看它是否按预期工作