首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点燃C++和缓存亲和性

点燃C++和缓存亲和性
EN

Stack Overflow用户
提问于 2017-02-15 07:23:33
回答 1查看 266关注 0票数 5

我使用Apache Ignite 1.8.0在集群上进行缓存。我正在使用Java,并从C++和C++访问相同的缓存。这可以很好地工作,但我也想使用关联搭配在缓存数据的同一个节点上执行任务。我在Java语言中创建缓存,将数据放在C++中,然后想在Java语言中对这些数据运行任务。C++应用程序接口不支持亲和性,所以我现在想知道我的选项是什么。

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

代码语言:javascript
复制
final IgniteCache<Integer, ByteArray> cache = ignite.createCache("myCacheBinaryCpp")

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

代码语言:javascript
复制
int8_t* byteArr= new int8_t[3];
byteArr[0] = 0;
byteArr[1] = 2;
byteArr[2] = 2;
cacheCppJ.Put(i, ByteArray(3,byteArr));

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

代码语言:javascript
复制
final Integer affKey = new Integer(9);
ignite.compute().affinityRun("myCacheBinaryCpp", affKey, () -> {
      cache.get(affKey);
      System.out.println("Got cache with affinity");
});

问题是C++中的键只是一个整数,并且没有关联的AffinityKey。因此,我不知道我用Java语言创建的affKey是否会始终以正确的节点亲和性运行。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 20:12:52

如果您的值在Java端被正确序列化,并且可以从Java端访问(您可以在C++上用Put检查它,在Java端用Get检查它),那么affinityRun将做它应该做的事情-它将在主节点上为提供的键运行task。

所以答案是“是的,这是可行的”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42238071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档