我的示例用例: 我有一个带有旧成员资格列表的IMap(其中成员的地址存储为成员对象的属性),还有一个带有备用成员列表中有效地址的IMap。我知道我的旧成员IMap具有较旧的信息,备用地址列表具有最新的地址信息(例如4位邮政编码扩展名)。
我想访问旧成员IMap中的每个成员条目,并从成员对象创建一个新的地址对象。每个唯一的地址最终都将存储在数据库中,所以我不希望重复的地址对象。我想将每个唯一地址存储在有效地址的IMap中。
如果我遍历旧成员IMap,则在尝试将新地址对象放入新的有效地址IMap中时会遇到Class Not Found
异常。
如果在访问一个IMap中的对象时正在创建新对象,该如何在另一个IMap中收集它们?
答案 0 :(得分:0)
条目处理器只能在提交给它们的条目上工作(executeOnKey()方法的目标)。由于入口处理器在专用于保存数据的分区的操作线程上运行,因此可以进行多种优化。如果条目处理器要访问另一个分区中的数据,则将需要锁定,并且有可能发生死锁。如果另一个条目位于不同的群集节点上,则可能会对条目处理器的性能产生不利影响,这应该是一种快速的操作。
executeOnKey方法返回一个对象;您可以对条目处理器进行编码以返回新的地址对象,然后客户端可以将该对象放置到适当的映射中(该映射可能在其他群集节点上)。
这对于Hazelcast Jet也可能适用; Jet可以将一个地图用作源,将另一个地图用作接收器,并在其管线中执行适当的操作。
答案 1 :(得分:0)
处理这种情况(影响第二个地图中的项目)的正确方法是使用EventListener。
我为旧成员映射实现了一个EventListener,每当更新旧成员映射中的成员时,该地址监听器就会向地址映射添加一个地址对象(如果尚不存在)。
Jet似乎确实是处理这种过程模型的好方法,但是我还没有实现它来验证它在我的用例中如何工作。