如何使用 Ignite 瘦客户端指定创建缓存时的分区数量?

问题描述 投票:0回答:2

我们在应用程序中使用 Ignite 缓存。多个实例加入拓扑,其中使用

Ignite.getOrCreateCache()
创建缓存,并使用
RendezvousAffinityFunction
进行分区,例如:

public static IgniteCache<String, Value> getOrCreateCache(Ignite ignite, String cacheName, int partitionCount) {
        return ignite.getOrCreateCache(
                new CacheConfiguration<String, Value>(cacheName)
                        .setGroupName("group")
                        .setBackups(0)
                        .setCacheMode(CacheMode.PARTITIONED)
                        .setAtomicityMode(CacheAtomicityMode.ATOMIC)
                        .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
                        .setAffinity(new RendezvousAffinityFunction(true, partitionCount))
               );
    }

我正在将应用程序从胖客户端迁移到瘦客户端,因此使用

IgniteClient.getOrCreateCache()
,例如:

    public static ClientCache<String, Value> getOrCreateCache(IgniteClient igniteClient, String cacheName, int partitionCount) {
        return igniteClient.getOrCreateCache(
                new ClientCacheConfiguration()
                        .setName(cacheName)
                        .setGroupName("group")
                        .setBackups(0)
                        .setCacheMode(CacheMode.PARTITIONED)
                        .setAtomicityMode(CacheAtomicityMode.ATOMIC)
                        .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
                        // .setAffinity() ???
                );
    }

我正在努力寻找有关通过

IgniteClient
配置缓存的更多信息,无论是在文档还是来源中。据我发现,瘦客户端支持分区感知,并且可以在节点上分发缓存操作。 这样会在缓存上创建多少个分区,为什么它不可配置?

java ignite gridgain
2个回答
0
投票

分区计数由亲和函数提供。你可以这样设置:

CacheConfiguration<Object, Object> cacheCfg = new CacheConfiguration<>("cache-1")
        .setAffinity(new RendezvousAffinityFunction().setPartitions(512));

但是,无法从客户端设置自定义亲和力(出于技术原因 - 亲和力函数可以具有自定义实现,并且需要代码部署)。

解决方法:


0
投票

请注意,默认情况下,分区缓存有 1024 个分区。这对于大多数应用程序来说非常有效,因为有足够的数据划分,但又不会太多。应用于键以确定哪个分区的哈希函数也非常适合 1024 个分区。我只能想到更改分区计数的很少几个原因。具体如下: 1.) 我有一个超过 1024 个节点的集群,我希望看到我的数据分区到所有节点上。 2.) 我有 1 个过大的缓存,我希望在该缓存上看到较小的分区。即使对于小型缓存场景,我也可能会选择使用复制缓存,特别是如果该缓存更新得不多的话。希望以上的想法对大家有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.