首页 > 解决方案 > 点燃/GridGain putAllIfAbsent

问题描述

我使用 GridGain 作为我的持久性数据库。我有以下要求。

  1. 如果键不存在,则插入多条记录
  2. 如果 key 存在或不存在,则放置多条记录。

对于 1,我看到cache.putIfAbsent(key, value)了如果不存在则插入单个记录的方法。但我没有找到cache.putAllIfAbsent(Map<key, value>)类似的方法。我可以循环以一一插入多条记录。是否存在性能问题?

对于2,我认为我可以使用cache.putAll(Map<key, value>)方法。如果是正确的方法?

我在谷歌云 Kubernetes 引擎中作为胖客户端运行服务器。

标签: ignitegridgain

解决方案


  • putAll总是覆盖现有记录
  • putIfAbsent在一个循环中会比putAll. 衡量你的具体用例,看看有多少

如果对排序和原子性没有要求,DataStreamer是一个不错的选择。当allowOverwriteflag 为 false(默认)时,您将获得putIfAbsent行为和良好的性能。

try (IgniteDataStreamer<Integer, String> stmr = ignite.dataStreamer("myCache")) {    
    stmr.allowOverwrite(false); // Don't overwrite existing data

    Map<Integer, String> entries = getMydata()
    stmr.addData(entries);
}

推荐阅读