是否可以在Hazelcast中加入两个不同的IMap?

ani*_*has 1 hazelcast hazelcast-imap hazelcast-jet

我有两个hazelcast地图1. map2 2. map2

我想把两个地图都放在键上。

我可以在hazelcast中做吗?

谢谢

Mar*_*nik 5

更新了Jet 0.7的答案:

如果要IMap在其“主键”(映射中使用的实际键)上将两个s 连接在一起,则应使用hashJoin管道变换。让我们从这些源代码阶段开始:

BatchStage<Entry<String, Person>> person = p.drawFrom(Sources.map("person"));
BatchStage<Entry<String, Employee>> employee = p.drawFrom(Sources.map("employee"));
Run Code Online (Sandbox Code Playgroud)

这是加入他们的基本方式:

BatchStage<Tuple2<Person, Employee>> joined =
    persons.hashJoin(employees, joinMapEntries(Entry::getKey),
        (personEntry, employee) -> tuple2(personEntry.getValue(), employee));
Run Code Online (Sandbox Code Playgroud)

您将获得成对的配对项目(Tuple2<Person, Employee>)。另一种常见情况是将一个项目附加到另一个项目,例如Employee可能具有一个person属性:

class Employee { 
    Person person; 

    Employee setPerson(Person person) { 
        this.person = person;
        return this;
    } 
}
Run Code Online (Sandbox Code Playgroud)

有了这个你可以写

BatchStage<Employee> joined =
    persons.hashJoin(employees, joinMapEntries(Entry::getKey),
        (personEntry, employee) -> employee.setPerson(personEntry.getValue()));
Run Code Online (Sandbox Code Playgroud)

Jet 0.4的旧答案:

您可以使用Hazelcast Jet以流方式将两个地图合并在一起。检出cogroup-operator其中实现了自定义加入处理器的代码示例(术语“ co-group”和“ join”密切相关)。您将能够提供两个地图源,并且在输出流中,每个不同的键将获得一对集合,其中每个源中的所有项都具有相同的键。您也可以使其适应于生产成对的物品。

对流连接的一流支持是即将发布的Jet计划的一项功能。