【问题标题】:Ignite C++ and Cache Affinity点燃 C++ 和缓存关联
【发布时间】:2017-07-03 10:42:50
【问题描述】:

我正在使用 Apache Ignite 1.8.0 在集群上进行缓存。我正在使用 C++ API 并从 Java 和 C++ 访问相同的缓存。这很好用,但我还想使用亲和力搭配在缓存数据的同一节点上执行任务。我在 Java 中创建缓存,将数据放在 C++ 中,然后想在 Java 中对这些数据运行任务。 C++ API 没有 Affinity 支持,所以我现在想知道我的选择是什么。

这就是我创建缓存的方式:

final IgniteCache<Integer, ByteArray> cache = ignite.createCache("myCacheBinaryCpp")

然后我从 C++ 中放入数据。我有一个简单的字节数组类用于测试。

int8_t* byteArr= new int8_t[3];
byteArr[0] = 0;
byteArr[1] = 2;
byteArr[2] = 2;
cacheCppJ.Put(i, ByteArray(3,byteArr));

现在我想做以下类似的事情,但不知道如何确保我的 Java 任务将在本地执行到数据。

final Integer affKey = new Integer(9);
ignite.compute().affinityRun("myCacheBinaryCpp", affKey, () -> {
      cache.get(affKey);
      System.out.println("Got cache with affinity");
});

问题在于 C++ 中的键只是一个 int 并且没有关联的 AffinityKey。因此我不知道我在 Java 中创建的 affKey 是否将始终以正确的节点亲和性运行。

这是正确的方法吗?我还考虑将我的每个缓存限制在一对节点上,以确保所有操作至少有 50% 的时间在正确的节点上(我的用例可以接受)。

【问题讨论】:

    标签: java c++ caching cross-platform ignite


    【解决方案1】:

    如果您的值在 C++ 端正确序列化并且可以从 Java 访问(您可以使用 C++ 上的 Put 和 Java 上的 Get 检查它)然后 affinityRun 将完全按照它应该做的 - 它会在主节点上为提供的密钥运行任务。

    所以答案是“是的,这会奏效”。

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多