I have a two node Hazelcast cluster with 6 gb heap size each . I have a predicate which runs on four fields so for example purpose , lets consider a class Employee
public class Employee {
String id,
String name,
String surname,
String timestamp
.....
}
The class has in total like 13 fields or so . I am running a range query on timestamp and absolute matching with the other 3 fields - id , name and surname. For serialization , I am using IdentifiedDataSerializable as that is the most efficient form of serialization hazelcast has to offer. I have a tomcat servlet container setup , so every request coming in fires a predicate on the cluster . The issue I am currently facing is when there are like around 100,000 records in the cluster and I conduct a performance test on the tomcat container, most of the tomcat threads get stuck as the predicate query never returns . I have looked at the threading model provided by hazelcast - https://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#threading-model . I have tinkered with the different kind of threads using the properties in the documentation and it has improved things but it has been basically firing in the dark . I have added an index on the field id but that too isn't really improving things .
I would really appreciate it , if someone points me in the right direction on how I could go about solving this issue. Thank you in advance!
EDIT -
Hazelcast version used both for the cluster and client is 3.9 . Also , i am using hazelcast as embedded in a spring boot application . Don't think that will have some effect , but wanted to let you all know.