Java Hazelcast:谓词性能问题
在使用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中面临性能问题
因此,我有一个模型类,如下所示:
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