Создание и заполнение карты Hazelcast при запуске узла

Есть ли способ выполнить фрагмент кода на узле hazelcast (версия 3.4) после запуска узла?

Идея такова: как только один из узлов hazelcast запускается, чтобы создать карту (не дожидаясь выполнения .getMap на стороне клиента) и заполнить данными из базы данных, чтобы, когда клиент запрашивает данные, карта уже заполнена.


person arvist    schedule 27.12.2016    source источник


Ответы (2)


да. Вам необходимо реализовать MapLoader для вашего IMap, а затем использовать метод MapLoader.loadAllKeys() для инициализации карты с помощью горячих клавиш.

Вот что говорится в документации:

Вы можете использовать API MapLoader.loadAllKeys для предварительного заполнения карты в памяти при первом касании / использовании карты. Если MapLoader.loadAllKeys возвращает NULL, то ничего не загружается. Ваша реализация MapLoader.loadAllKeys может возвращать все или некоторые ключи. Например, вы можете выбрать и вернуть только горячие клавиши. MapLoader.loadAllKeys - это самый быстрый способ предварительного заполнения карты, поскольку Hazelcast оптимизирует процесс загрузки, заставляя каждый узел загружать принадлежащую ему часть записей.

3.5 Ссылка на документацию о сохранении состояния карты

person A.K.Desai    schedule 27.12.2016
comment
Проблема в том, что loadAllKeys вызывается, когда вызывается getMap (когда карта впервые затрагивается / используется). Мне нужен способ вызвать это сразу после запуска узла, чтобы гарантировать, что это произойдет в нерабочее время. - person arvist; 27.12.2016
comment
Я бы рекомендовал включить этот шаг при запуске узла в сценарий запуска узла. - person A.K.Desai; 28.12.2016

Это можно решить, указав настраиваемую службу в hazelcast.xml. Конструктор службы вызывается при запуске узлов, и оттуда можно запросить и заполнить карту hazelcast. Но вызов getMap должен выполняться в новом потоке

person arvist    schedule 30.12.2016