Производительность Hazelcast IMap

Я использую фундук 3.8.6. Существует IMAP{Key, Value} со следующими настройками:

mapConfig.setBackupCount(5);
mapConfig.setReadBackupData(true);

Ключ

long userId;
long contentId;

также есть 5 узлов, где находятся данные. Насколько я понимаю, в соответствии с настройкой каждый узел будет иметь все данные. Таким образом я превращаю распределенную карту в реплицированную карту, чтобы увеличить скорость операций get и не выполнять сетевые вызовы.

Давайте представим, что мне нужно получить все данные для пользователя по идентификатору. в обычном режиме я бы написал следующий код:

EntryObject eo = new PredicateBuilder().getEntryObject();
Predicate predicate = eo.key().get("this.userId").equal(userId);
map.values(predicate).stream().map(.....)

этот код будет выполнен на всех узлах, и результат будет возвращен узлу, который выполняет вызов. Правильно ли я понимаю, что в случае настроек "setReadBackupData(true)" запрос не будет отправлен на другие узлы, и все данные будут найдены на узле, который выполняет этот запрос? или в этом случае, чтобы избежать сетевых вызовов, я просто должен использовать что-то вроде этого:

map.entrySet().stream()
.filter(entry->entry.getKey().getUserId().equals(userId))
.map(.....)

Благодарю.

1 ответ

Помните, что флаг readBackupData работает только в том случае, если вы выполняете запрос изнутри члена, поэтому, если вы используете HazelcastClient, он не будет читать из резервной копии.

Другие вопросы по тегам