我需要从Hazelcast分布式地图中删除一个项目,我使用类似这样的代码(简化):
public void realeaseBatchesById(int Id) { Iterator> it = workingMap.entrySet().iterator(); while (it.hasNext()) { WorkingBatch value = it.next().getValue(); if (value.getServer().getId() == idd) { it.remove(); } } }
但是这段代码不会删除值,地图的大小在开头与结尾处的大小相同.
当我看到Hazelcast Javadoc时,我看到这个接口只定义了按键和键的值删除.这是否意味着我不能使用标准方法如何从地图中删除值?
从地图中删除您无法通过迭代器执行的项目.迭代器是入口集的临时副本,对它的更改不会反映到地图的内容.
你的方法不是很可扩展,因为你遍历地图中的所有条目,想象你有数千兆字节的地图条目..大约50%需要在找到你的项目之前通过线路发送.
如果要删除项目,可以执行以下操作:
map.remove(somekey)
但最大的问题是:你如何找到你的物品.在你的情况下你的项目显然有某种server.id,所以你可以在该id上创建一个索引,这样你就可以快速查找,并将其与:
IMap.executeOnEntries(EntryProcessor entryProcessor, Predicate predicate);
当您创建谓词(找到您的条目)并创建一个条目处理器(可以删除您的条目)时,您可以进行更有效的删除.