【发布时间】: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