使用Hazelcast将单个节点转换为分布式java应用程序

使用Hazelcast将单个节点转换为分布式java应用程序,java,hazelcast,vert.x,hazelcast-jet,Java,Hazelcast,Vert.x,Hazelcast Jet,我们有一个使用Vert.x构建的当前java应用程序,它使用简单的本地HashMaps。为了将我们的应用程序分发到多个节点上,我们希望用一个HazelcastIMap替换本地hashmap 基本上我们有2个HashMaps: Map<String, Group> // <groupId - group> Map<String, Set<String> // <memberId - set of groupIds> 我们应该能够做到: Co

我们有一个使用Vert.x构建的当前java应用程序,它使用简单的本地
HashMaps
。为了将我们的应用程序分发到多个节点上,我们希望用一个Hazelcast
IMap
替换本地hashmap

基本上我们有2个HashMaps

Map<String, Group> // <groupId - group>
Map<String, Set<String>  // <memberId - set of groupIds>
我们应该能够做到:

Collection<Group> groups = imap.values(Predicates.in("members", varargs of member ids))
非常感谢

  • 如果原始地图不包含重复项,且IMap未同时更新,则不应包含重复项

  • 这取决于您的用例,我不能概括地说

  • 这不好,因为
    imap.values
    调用被阻塞,并且
    flatMap
    中的函数不能被阻塞。我所说的阻塞是指阻塞IO操作。此外,您无法从局部变量捕获
    imap
    实例,因为它不可序列化,Jet无法将其发送给成员。但是您可以像这样使用
    mapUsingService
    servicefactures.imapService

  • .mapUsingService(
    ServiceFactorys.iMapService(“我的地图”).toNonCooperative(),
    (imap,成员ID)->
    值(谓词.in(“memberId”,memberId.toArray(新字符串[0]))
    
  • 如果原始地图不包含重复项,且IMap未同时更新,则不应包含重复项

  • 这取决于您的用例,我不能概括地说

  • 这不好,因为
    imap.values
    调用被阻塞,并且
    flatMap
    中的函数不能被阻塞。我所说的阻塞是指阻塞IO操作。此外,您无法从局部变量捕获
    imap
    实例,因为它不可序列化,Jet无法将其发送给成员。但是您可以像这样使用
    mapUsingService
    servicefactures.imapService

  • .mapUsingService(
    ServiceFactorys.iMapService(“我的地图”).toNonCooperative(),
    (imap,成员ID)->
    值(谓词.in(“memberId”,memberId.toArray(新字符串[0]))
    
    Collection<Group> groups = imap.values(Predicates.in("members", varargs of member ids))
    
    StreamStage.flatMap(memberIds -> Traversers.traverseIterable(imap.values(Predicates.in("memberIds", memberIds.toArray(new String[0])))