簡體   English   中英

從Hazelcast地圖中刪除元素的正確方法是什么?

[英]What is the proper way to remove an element from a Hazelcast Map?

我需要從Hazelcast分布式地圖中刪除一個項目,並且使用類似以下代碼的代碼(簡化):

  public void realeaseBatchesById(int Id) {

    Iterator<Map.Entry<Long, WorkingBatch>> 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);

創建謂詞(查找條目)並創建條目處理器(可以刪除條目)時,可以執行更高效的刪除操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM