У меня есть две карты hazelcast 1. map2 2. map2
Хотел соединить обе карты по ключу.
Могу ли я сделать это в hazelcast?
Спасибо
У меня есть две карты hazelcast 1. map2 2. map2
Хотел соединить обе карты по ключу.
Могу ли я сделать это в hazelcast?
Спасибо
Если вы соединяете два IMap
по их «первичному ключу» (фактический ключ, используемый в карте), вы должны использовать конвейерное преобразование hashJoin
. Начнем с этих исходных стадий:
BatchStage<Entry<String, Person>> person = p.drawFrom(Sources.map("person"));
BatchStage<Entry<String, Employee>> employee = p.drawFrom(Sources.map("employee"));
Это основной способ присоединиться к ним:
BatchStage<Tuple2<Person, Employee>> joined =
persons.hashJoin(employees, joinMapEntries(Entry::getKey),
(personEntry, employee) -> tuple2(personEntry.getValue(), employee));
Вы получите пары соединенных предметов (Tuple2<Person, Employee>
). Другим распространенным случаем является присоединение одного элемента к другому, например, Employee
может иметь свойство person
:
class Employee {
Person person;
Employee setPerson(Person person) {
this.person = person;
return this;
}
}
С этим вы можете написать
BatchStage<Employee> joined =
persons.hashJoin(employees, joinMapEntries(Entry::getKey),
(personEntry, employee) -> employee.setPerson(personEntry.getValue()));
Вы можете использовать Hazelcast Jet для объединения двух карт в потоковом режиме. Ознакомьтесь с cogroup-operator
. пример кода, в котором реализован пользовательский обработчик объединения (термины "совместная группа" и "объединение" тесно связаны). Вы сможете предоставить два источника карт, и в выходном потоке вы получите пару коллекций для каждого отдельного ключа, содержащих все элементы с одним и тем же ключом из каждого из источников. Вы также можете адаптировать его для производства пар предметов.
Первоклассная поддержка присоединения к потоку — это функция, запланированная для предстоящего выпуска Jet.
Присоединяясь, что вы имеете в виду или какую операцию вы хотите выполнить, присоединившись? Вы можете иметь 2 разные карты с одним и тем же ключом и настроить как PartitionAware, чтобы оба ключа были в одном разделе/участнике (т. е. операции можно выполнять без затрат на дополнительные сетевые вызовы и дополнительные проводные данные). http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#data-affinity