在启动应用程序时,需要从hazelcast地图加载5百万个条目到另一个地图

时间:2017-11-13 11:38:07

标签: java hazelcast hazelcast-imap

我想从hazelcast IMap加载500万条目到另一张地图,但是花了太多时间。我如何优化它,所以它应该花更少的时间,我的应用程序可以尽早出现.Below是代码片段

    //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();

1 个答案:

答案 0 :(得分:0)

你可以这样做:

IMap map = hc.getMap("some-map");
Map result = map.getAll(map.keySet());

但这将是一项昂贵的操作。或者运行谓词来检索所有值,请参阅doc:http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#distributed-query

但这确实看起来像一个设计问题,因为你必须在应用程序jvm中容纳所有500万个条目 - 增加内存占用。此外,不要忘记同时移动这些条目的网络和ser / des开销。

如果您的用例如此,我建议您还要将结果集分页为小块,有关详细信息,请参阅Paging Predicate doc:http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#filtering-with-paging-predicates