Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动应用程序时,需要将500万个条目从hazelcast映射加载到另一个映射_Java_Hazelcast_Hazelcast Imap - Fatal编程技术网

Java 启动应用程序时,需要将500万个条目从hazelcast映射加载到另一个映射

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

我想从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 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的服务,它应该首先初始化。