我们在应用程序中使用 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
配置缓存的更多信息,无论是在文档还是来源中。据我发现,瘦客户端支持分区感知,并且可以在节点上分发缓存操作。
这样会在缓存上创建多少个分区,为什么它不可配置?
请注意,默认情况下,分区缓存有 1024 个分区。这对于大多数应用程序来说非常有效,因为有足够的数据划分,但又不会太多。应用于键以确定哪个分区的哈希函数也非常适合 1024 个分区。我只能想到更改分区计数的很少几个原因。具体如下: 1.) 我有一个超过 1024 个节点的集群,我希望看到我的数据分区到所有节点上。 2.) 我有 1 个过大的缓存,我希望在该缓存上看到较小的分区。即使对于小型缓存场景,我也可能会选择使用复制缓存,特别是如果该缓存更新得不多的话。希望以上的想法对大家有帮助。