【问题标题】:Apache.Ignite.NET - Define node that caches specific affinityApache.Ignite.NET - 定义缓存特定亲和力的节点
【发布时间】:2018-02-17 09:24:58
【问题描述】:

在 Ignite.NET 中,可以在“相同”节点缓存具有相同亲和力的键值对。是否可以定义应该使用的特定节点?

这是一个测试程序,我想定义一个节点来缓存关联“客户”,另一个节点来缓存关联“成员”。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (var ignite = Ignition.Start())

        {
            var cache = ignite.GetOrCreateCache<AffinityKey, Person>(new CacheConfiguration("person-cache")
            {
                CacheMode = CacheMode.Partitioned,
            });

            cache.Put(new AffinityKey(1, "customer"), new Person { Name = "Test customer", Age = 7 });
            cache.Put(new AffinityKey(1, "member"), new Person { Name = "Test member", Age = 7 });

            foreach (var item in cache)
            {
                Console.WriteLine($"{item.Key}: {item.Value.Name} - {item.Value.Age}");
            }

            Console.ReadKey();
        }
    }
}

【问题讨论】:

    标签: .net ignite


    【解决方案1】:

    在您的代码中,所有客户都将进入一个分区,所有成员也将聚集在一个分区中,但不能 100% 保证它将是两个不同的分区,这也意味着您的数据分布会很差,因为只使用了两个分区,在最好的情况下,您只能使用 2 个主机和 2 个 CPU 内核。

    因此,对于您的情况,我建议使用两个不同的缓存和节点过滤器: https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html#setNodeFilter(org.apache.ignite.lang.IgnitePredicate)

    在谓词中,您可以指定应使用哪个节点来存储每个缓存的数据,并通过此按节点拆分记录。

    【讨论】:

    【解决方案2】:

    您似乎处于 CPU Affinity 上下文中,该上下文用于将特定进程/线程分配/绑定到某个特定 CPU 内核。

    Apache Ignite 将 Affinity 用于不同的目的。这是collocating您在同一个集群节点上的几种数据类型(缓存)的一种方式。因此,亲和性可以通过解决集群同一节点上的特定数据分区来提高跨缓存操作的性能,同时保持集群中的一般数据分布。

    您应该按照 Michael 为您的目的建议的那样使用 cluster groups 和/或节点过滤器。

    【讨论】:

    • NodeFilter 可能有效,但我在 .NET API 中找不到等效项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多