У меня есть двухузловой кластер Hazelcast с размером кучи 6 ГБ каждый. У меня есть предикат, который работает с четырьмя полями, поэтому, например, цель, давайте рассмотрим класс Employee
public class Employee {
String id,
String name,
String surname,
String timestamp
.....
}
Класс имеет в общей сложности 13 полей или около того. Я запускаю запрос диапазона по отметке времени и абсолютному совпадению с другими 3 полями - id , имя и фамилия. Для сериализации я использую IdentifiedDataSerializable, поскольку это наиболее эффективная форма сериализации, которую может предложить hazelcast. У меня есть установка контейнера сервлета tomcat, поэтому каждый поступающий запрос запускает предикат в кластере. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда в кластере около 100 000 записей, и я провожу тест производительности в контейнере tomcat, большинство потоков tomcat зависают, поскольку запрос предиката никогда не возвращается. Я просмотрел модель потоков, предоставляемую hazelcast — https://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#threading-model . Я возился с различными типами потоков, используя свойства в документации, и это улучшило ситуацию, но в основном это было в темноте. Я добавил индекс для идентификатора поля, но это тоже не улучшает ситуацию.
Я был бы очень признателен, если бы кто-то указал мне правильное направление, как я мог бы решить эту проблему. Заранее спасибо!
РЕДАКТИРОВАТЬ -
Версия Hazelcast, используемая как для кластера, так и для клиента, — 3.9. Кроме того, я использую hazelcast, встроенный в приложение весенней загрузки. Не думаю, что это будет иметь какой-то эффект, но хотел, чтобы вы все знали.