【发布时间】: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