繁体   English   中英

Ignite C ++和Cache Affinity

[英]Ignite C++ and Cache Affinity

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

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

所以答案是“是的,这会起作用”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM