Hazelcast IMap - 什么是获得多个密钥价值最有效的方法?

时间:2017-09-13 04:49:40

标签: hazelcast hazelcast-imap

用例: IMap并拥有70K条目。大多数操作都是GET调用多个键。 GET电话(90%)> PUT呼叫(10%)。我们正在使用EP进行PUT调用。

问题:获取多个实例的数据的最有效方法是什么?

可能的解决方案: 1.具有ReadOnly,Offloadable和使用executeOnKeys方法的EP。 2.并行执行所有键的map.get(key)。

有没有其他有效的方法来获取多个密钥的数据?

  1. 谓词

    public class ExecuteOnSelectedKeyPredicateTest {            public static void main(String [] args){             HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

            IMap<String, Integer> map = hazelcastInstance.getMap("testMap");
    
            map.put("testKey1", 1);
            map.put("test", 2);
            map.put("testKey3", 3);
    
            // Get entries which ends with a number
            Set<Map.Entry<String, Integer>> entries = map.entrySet(new ExecuteOnSelectedKeyPredicate("^.+?\\d$"));
    
            System.out.println(entries);
        }
    
        public static class ExecuteOnSelectedKeyPredicate implements Predicate<String, Integer> {
    
            private String keyRegex;
            private transient Pattern pattern;
    
            public ExecuteOnSelectedKeyPredicate(String keyRegex) {
                this.keyRegex = keyRegex;
            }
    
    
            @Override
            public boolean apply(Map.Entry<String, Integer> mapEntry) {
                if (pattern == null) {
                    pattern = Pattern.compile(keyRegex);
                }
                Matcher matcher = pattern.matcher(mapEntry.getKey());
                return matcher.matches();
            }
        }
    }  
    

1 个答案:

答案 0 :(得分:1)

获取多个密钥,请求可能会转到多个成员。 executeOnKeys在这里非常优秀,因为它计算了需要在其上执行操作的分区,并且它只将该操作发送到这些分区。 Offloadable确保您不会阻止partitionThreads和ReadOnly进一步优化处理。

多个get操作将产生更多网络流量,因为每个密钥只有一个操作。