在 Apache Ignite 中,如何控制在哪个节点上创建缓存

In Apache Ignite, how to control on which node cache is created

在 ignite 中,如何控制在哪个节点上创建缓存?如果我需要保证在所有节点上创建一个缓存,我该怎么做?

以下代码会在所有节点上创建缓存还是仅在其中一些节点上创建缓存?

ignite.cluster().forServers().ignite().createCache("myCache")

谢谢。

简而言之,要在所有节点上都有一个缓存,您需要配置 REPLICATED cache mode. The default mode is PARTITIONED 一个,这意味着数据将平均分布在集群节点上。

我认为配置nodeFilters是调整默认行为的最简单方法,你可以根据一些用户定义的节点属性告诉Ignite哪些节点不应该保留数据。请注意,您应该有充分的理由支持更改默认分布并了解权衡取舍。

默认情况下,Ignite 在整个服务器节点集上创建缓存。 但是,可以控制该行为。有一种称为 node filter 的机制可以选择节点子集来存储缓存数据。 我在这里想说的是,即使通过调用,也会在任何地方创建缓存:

ignite.getOrCreateCache("myCache")

要使计算调用并置,您可以使用 affinityCall。可以找到更详细的信息 here。示例(此 lambda 将在存储 myKey 键的节点上执行):

ignite.compute().affinityCall("myCache", myKey, () -> {
    // do something
    return "something";
})

另一种选择是 specify 节点子集(甚至可能只有一个节点)用于您的计算。类似的东西(这个 lambda 将在具有 nodeId id 的节点上执行):

ignite.compute(ignite.cluster().forNodeId(nodeId)).call(() -> {
    // do something
    return "something";
})