Я бы посоветовал использовать вычисления и отправить закрытие для всех узлов в топологии кэша. Затем на каждом узле вы должны выполнить локальный первичный набор и выполнить обновления. Даже при таком подходе вам все равно лучше собирать обновления и выпускать их с помощью вызова putAll (или, возможно, использовать IgniteDataStreamer).
ПРИМЕЧАНИЕ: для приведенного ниже примера важно, чтобы ключи в кэшах «сопоставлений» и «сущностей» были либо идентичными, либо совмещенными. Более подробная информация о размещении здесь:
https://apacheignite.readme.io/docs/affinity-collocation
Псевдокод будет выглядеть примерно так:
ClusterGroup cacheNodes = ignite.cluster().forCache("mappings");
IgniteCompute compute = ignite.compute(cacheNodes.nodes());
compute.broadcast(() -> {
IgniteCache<> mappings = getCache("mappings");
IgniteCache<> entities = getCache("entities");
// Iterate over local primary entries.
entities.localEntries(CachePeekMode.PRIMARY).forEach((entry) -> {
V1 mappingVal = mappings.get(entry.getKey());
V2 entityVal = entry.getValue();
V2 newEntityVal = // do enrichment;
// It would be better to create a batch, and then call putAll(...)
// Using simple put call for simplicity.
entities.put(entry.getKey(), newEntityVal);
}
});