【问题标题】:Putting cache entries to specific Ignite Server将缓存条目放入特定的 Ignite 服务器
【发布时间】:2016-12-13 06:40:16
【问题描述】:

我有一个由五台服务器(比如 A、B、C、D 和 E)组成的 Ignite 数据网格。已将分区缓存分布在这五台服务器上,备份数量设置为 1。

我想在这个分区缓存中存储 1 亿个条目。但是,我想控制我的缓存条目到 Ignite 服务器的分区。

是否可以指示我的 Ignite 客户端将缓存条目放在特定服务器(例如 E)上?

【问题讨论】:

    标签: caching ignite gridgain


    【解决方案1】:

    做到这一点的唯一方法是实现您自己的Affinity Function,而不是开箱即用提供的那些。但是,我建议您重新考虑这种方法,因为它不可扩展。 Ignite 中包含的关联函数旨在在任何节点集上提供均匀分布,因此您可以在需要时动态地向上和向下扩展。你的方法不太灵活。

    另外,我建议您浏览有关 Affinity Collocation 的文档页面。这很可能会为您提供有关如何以更好的方式实现逻辑的提示。

    最后,您能否提供更多有关您的用例的详细信息?我很乐意就如何处理它提供一些建议。

    【讨论】:

    • 我实际上是在尝试使用 Apache Ignite 创建一个布隆过滤器,我需要一个 1000 亿位的分布式数组。因为,Ignite 不支持分布式数组数据结构,所以我试图将数组分解为小的位集并将它们存储为缓存条目。我想控制分布,因为它可以帮助我确定哪个服务器具有特定的缓存条目并将我的计算作业(使用 Ignite Compute 网格)定向到该特定服务器。有没有什么方法可以获取给定特定密钥的服务器的节点 UUID?
    • 我刚刚发现可以使用函数 CacheConfiguration().getAffinityFunction().partition(Object key) 获取特定键所在的分区。您现在能告诉我,是否可以找到具有此分区的 Ignite 服务器的 UUID?
    • 这应该通过Affinity API 来完成,可以通过Ignite.affinity() 方法获取。但是要发送并置的闭包,您可以简单地使用 IgniteCompute.affinityRun()IgniteCompute.affinityCall() 方法。
    • 由于无法确定 Ignite 集群中持有密钥的 Ignite 服务器。Entry 处理器是否是对密钥进行亲和性运行的好选择?
    • 我只是给了你方法 :) 使用Affinity API 手动计算映射。我只是说affinityRun()affinityCall() 会自动为你完成这项工作。这些方法还确保在您的计算完成之前不会驱逐分区。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2016-05-07
    • 2021-07-14
    相关资源
    最近更新 更多