Java 启动应用程序时,需要将500万个条目从hazelcast映射加载到另一个映射
我想从hazelcast IMap加载500万条条目到另一张地图,但这花费了太多时间。我如何优化它,使它花费更少的时间,我的应用程序可以尽早启动Java 启动应用程序时,需要将500万个条目从hazelcast映射加载到另一个映射,java,hazelcast,hazelcast-imap,Java,Hazelcast,Hazelcast Imap,我想从hazelcast IMap加载500万条条目到另一张地图,但这花费了太多时间。我如何优化它,使它花费更少的时间,我的应用程序可以尽早启动 //localMap is another map where i want to put all entries from Hazelcast Map<Object, Object> localMap = new ConcurrentHashMap(); //imap is hazelcast map refere
//localMap is another map where i want to put all entries from Hazelcast
Map<Object, Object> localMap = new ConcurrentHashMap();
//imap is hazelcast map reference
Iterator<Object> itr = imap.keySet().iterator();
while (itr.hasNext()) {
Object obj = itr.next();
localMap.put(obj, imap.get(obj));
}
//returning entry set of local map
return localMap.entrySet().iterator();
//localMap是另一个映射,我想在其中放置来自Hazelcast的所有条目
Map localMap=新的ConcurrentHashMap();
//imap是hazelcast地图参考
迭代器itr=imap.keySet().Iterator();
while(itr.hasNext()){
Object obj=itr.next();
localMap.put(obj,imap.get(obj));
}
//返回本地映射的条目集
返回localMap.entrySet().iterator();
您可以这样做:
IMap map = hc.getMap("some-map");
Map result = map.getAll(map.keySet());
但这将是一项昂贵的手术。或者运行谓词来检索所有值,请参见文档:
但这看起来确实像是一个设计问题,因为您必须在应用程序jvm中容纳所有500万个条目—增加的内存占用。另外,在同时移动这些条目时,不要忘记网络和ser/des开销
如果您的用例是这样的,那么我建议您也将结果集分成小块分页,有关更多详细信息,请参阅分页谓词文档:将其并行化为五个线程,每个线程只复制一百万个条目?您不能在后台线程中初始化映射,以便应用程序可以更快启动吗?我可以帮忙。但总的来说,这似乎是一个设计问题。当初始化逻辑完成时,与之前处理密钥的时间相比,您如何确保映射包含相同的值?@Shark感谢您的建议,但问题是如何将它划分为每个线程1M个条目?@StephaneM不,我不能,因为我有一些依赖于localmap的服务,它应该首先初始化。