Ignite C ++和Cache Affinity

时间:2017-02-14 23:23:33

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

我正在使用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%的时间内都在正确的节点上(我的用例可以接受)。

1 个答案:

答案 0 :(得分:1)

如果您的值在C ++端正确序列化并且可以从Java访问(您可以在C ++上使用Put并在Java上使用Get进行检查),那么affinityRun将完全正确它应该是什么 - 它将在主节点上为所提供的密钥运行任务。

所以答案是&#34;是的,这将起作用&#34;。

相关问题