Hazelcast Entry Processor: когда объекты влияют на объекты на других картах - PullRequest
0 голосов
/ 19 октября 2018

Мой пример использования: у меня есть IMap со старым списком участников (где адреса участников хранятся как атрибуты объекта-члена) и IMap с действительными адресами из списка альтернативных членов.Я знаю, что мой старый участник IMap содержит более старую информацию, а список альтернативных адресов содержит актуальную информацию об адресе (например, 4-значные расширения почтового индекса).

Я хочу посетить каждую запись участника в старом элементе IMap и создать новый объект address из объекта member.Каждый уникальный адрес в конечном итоге будет храниться в базе данных, поэтому я не хочу дублировать адресные объекты.Я хочу сохранить каждый уникальный адрес в IMap действительных адресов.

Если я перебираю старый член IMap, я получаю исключение Class Not Found при попытке вставить новый объект адреса в новый IMap действительных адресов,

Если я создаю новые объекты во время посещения объектов в одном IMap, как мне собрать их в другом IMap?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Правильный способ справиться с этой ситуацией (воздействовать на элементы на второй карте) - использовать EventListener.

Я реализовал EventListener для старой карты элементов, которая добавляет объект адреса к карте адресов, если он еще не существует, всякий раз, когда элемент в старой карте элементов обновляется.

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

0 голосов
/ 19 октября 2018

Процессоры ввода предназначены для работы только с записью, в которую они отправлены (цель метода executeOnKey ()).Это допускает ряд оптимизаций, поскольку процессор ввода работает в потоке операций, выделенном для раздела, содержащего данные.Если Entry Processor должен был получить доступ к данным в другом разделе, потребовались бы блокировки, и существует вероятность возникновения тупика.Если другая запись находится на другом узле кластера, это может отрицательно повлиять на производительность процессора ввода, что должно быть быстрой операцией.

Метод executeOnKey возвращает объект;Вы можете написать свой Entry Processor для возврата нового объекта адреса, и клиент может затем поместить этот объект в соответствующую карту (которая может находиться на другом узле кластера).

Это также то, что может подойти для Hazelcast Jet;Jet может использовать одну карту в качестве источника и другую карту в качестве приемника и выполнять соответствующие операции в рамках своего конвейера.

...