我想从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();
答案 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