Java Hazelcast:谓词性能问题

Java Hazelcast:谓词性能问题,java,performance,hazelcast,Java,Performance,Hazelcast,在使用hazelcast映射上的谓词时,我在hazelcast中面临性能问题 因此,我有一个模型类,如下所示: public class MyAccount { private String account; private Date startDate; private Date endDate; private MyEnum accountTypeEnum; // Overrides equals and hascodes using all the attr

在使用hazelcast映射上的
谓词时,我在hazelcast中面临性能问题

因此,我有一个模型类,如下所示:

public class MyAccount {
   private String account;
   private Date startDate;
   private Date endDate;
   private MyEnum accountTypeEnum;

   // Overrides equals and hascodes using all the attributes
   // Has getters and setters for all the attributes
}
然后创建一个hazelcast实例,类型为
hazelcast
。在这种情况下,我开始将
MyAccount
对象保存为键,并将相关字符串保存为值

请注意:我将这些帐户保存在不同的地图中(比如本地、州、国家和国际)

大约180000个
MyAccount
对象被创建并保存在hazelcast中,根据帐户的地理位置,以不同的地图显示。除此之外,hazelcast还将另外50000个字符串对象作为键和值存储在不同的映射中(不包括上述映射)

然后我有一个方法,它使用属性
account、
startDate和endDate
上的谓词过滤器来过滤帐户。让我们将此方法称为筛选器

public static Predicate filter(String account, Date date) {        
    EntryObject entryObject = new PredicateBuilder().getEntryObject();
    PredicateBuilder accountPredicate = entryObject.key().get(Constants.ACCOUNT).equal(account);
    PredicateBuilder startDatePredicate = entryObject.key().get(Constants.START_DATE).isNull().or(entryObject.key().get(Constants.START_DATE).lessEqual(date));
    PredicateBuilder endDatePredicate = entryObject.key().get(Constants.END_DATE).isNull().or(entryObject.key().get(Constants.END_DATE).greaterThan(date));
    return accountPredicate.and(effectiveDatePredicate.and(endDatePredicate));
}

 private void addIndexesToHazelcast() { 
        Arrays.asList("LOCAL", "STATE", "NATIONAL", "INTERNATIONAL").forEach(location -> {
            IMap<Object, Object> map = hazelcastInstance.getMap(location);
            map.addIndex("__key." + "startDate", true);
            map.addIndex("__key." + "endDate", true);
            map.addIndex("__key." + "account", false);
        });
    }
考虑到我在hazelcast映射中为相同的属性添加了索引,缓存获取单个帐户的值需要4-7秒,这让我感到惊讶。这是对性能的巨大打击


有人能告诉我为什么会这样吗?

你的堆有多大?您可能正在将内存分页到磁盘,这将使事情变得非常缓慢。我在Java Visual VM中看到的总堆大小约为1000 MB,而使用的堆大小从400 MB到750 MB不等,这可能还不够。试着把内存提高到2GB,看看这是否能改善情况。@ChrisShain:你可能正在将内存分页到磁盘,这会使事情变得非常缓慢。我该如何正确设置?请同时显示索引定义以及您使用的HZ版本?
Predicate predicate = filter(account, date);
String value = hazelcast.getMap(mapKey).values(predicate); // This line takes 4-7 secs