从Hazelcast地图中删除元素的正确方法是什么?

 wqp2012 发布于 2023-01-21 23:38

我需要从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时,我看到这个接口只定义了按键和键的值删除.这是否意味着我不能使用标准方法如何从地图中删除值?

1 个回答
  • 从地图中删除您无法通过迭代器执行的项目.迭代器是入口集的临时副本,对它的更改不会反映到地图的内容.

    你的方法不是很可扩展,因为你遍历地图中的所有条目,想象你有数千兆字节的地图条目..大约50%需要在找到你的项目之前通过线路发送.

    如果要删除项目,可以执行以下操作:

    map.remove(somekey)
    

    但最大的问题是:你如何找到你的物品.在你的情况下你的项目显然有某种server.id,所以你可以在该id上创建一个索引,这样你就可以快速查找,并将其与:

    IMap.executeOnEntries(EntryProcessor entryProcessor, Predicate predicate);
    

    当您创建谓词(找到您的条目)并创建一个条目处理器(可以删除您的条目)时,您可以进行更有效的删除.

    2023-01-26 11:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有