在Hazelcast 3.9.1中初始化集群分区表排列需要太长时间

问题描述 投票:0回答:1

我正在尝试创建一个Hazelcast服务项目,其中我将订阅RDBMS(Oracle DB 12c)数据存储区,使用反射动态创建POJO / Java Bean,然后解析该Java Bean对象以将JDBC ResultSet映射为Result行值到Java Bean对象中并将这些映射的对象加载到Distributed Map中。

我检查了我试图在Hazelcast IMap中加载的两个表的数据量,它低至0.0625和0.0316 MB。所以这是一个更简单的Hazelcast实现,只是初始化localhost上的两个并行实例/节点。

我在Java Main方法中计时从创建Java POJO类的瞬间开始的总运行时间,并在Hazelcast IMAP中创建和加载每个相应的Object。

根据我的理解,从系统角度来看,这需要太长时间,因为即使在测试和产品盒中我们也会看到类似的行为,系统规格比下面给出的要好3到4倍。请帮助提供有关错误的建议,或者这是第一次在具有群集中的2个节点的hazelcast IMDG中进行分区时的常用方法。

系统规格如下:

Macbook Pro 2014处理器:2.6 GHz Intel Core i5内存:8 GB 1600 MHz DDR3

请查找日志......

2018年2月26日10:30:39 com.hazelcast.internal.partition.impl.PartitionStateManager INFO:[xx.xxx.xx.xxx]:5702 [dev] [3.9.1]初始化集群分区表排列... userMaster Map中的条目数:883

userMaster Map中的条目数:7499

持续时间约为:92520毫秒2018年2月26日上午10:32:10 com.hazelcast.core.LifecycleService信息:[xx.xxx.xx.xxx]:5701 [dev] [3.9.1] [xx.xxx.xx .xxx]:5701是SHUTTING_DOWN

java performance hazelcast hazelcast-imap
1个回答
0
投票

虽然我无法修复MapLoader问题,但是结果集setFetchSize()是主要问题。这被设置为10,这导致网络i / o太高。一旦我增加到1000或更多,它就会变得更快。

日志:

使用Regular FetchSize():preparedStatement.getFetchSize():201年2月28日,下午7:24:51 com.hazelcast.internal.partition.impl.PartitionStateManager INFO:[xx.xxx.xx.xx]:5702 [dev] [3.9.1]初始化集群分区表排列......

userMaster Map中的条目数:26464

持续时间约为:276178毫秒

使用Bigger FetchSize():

preparedStatement.getFetchSize():1000 Feb 28,20188 7:31:06 PM com.hazelcast.internal.partition.impl.PartitionStateManager INFO:[xx.xxx.xx.xx]]:5702 [dev] [3.9.1]初始化集群分区表排列... responseCode:404 url​​:http://localhost:8080/mancenter/collector.do userMaster中的条目数地图:26464

持续时间约为:11279毫秒

我肯定会发布服务器和代码的客户端版本以获得MapLoader的帮助,这听起来像是最好的方法。

作为进一步的帮助,您能否提供一些信息,以确定是否可以为创建运行时的对象/类编写extends Mapload/Mapstore technique,因为我单独尝试的较小示例是使用固定的Java Bean。

我记得提到MapStoreFactory()选项的文档。这会有所帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.