【发布时间】:2016-12-13 06:40:16
【问题描述】:
我有一个由五台服务器(比如 A、B、C、D 和 E)组成的 Ignite 数据网格。已将分区缓存分布在这五台服务器上,备份数量设置为 1。
我想在这个分区缓存中存储 1 亿个条目。但是,我想控制我的缓存条目到 Ignite 服务器的分区。
是否可以指示我的 Ignite 客户端将缓存条目放在特定服务器(例如 E)上?
【问题讨论】:
我有一个由五台服务器(比如 A、B、C、D 和 E)组成的 Ignite 数据网格。已将分区缓存分布在这五台服务器上,备份数量设置为 1。
我想在这个分区缓存中存储 1 亿个条目。但是,我想控制我的缓存条目到 Ignite 服务器的分区。
是否可以指示我的 Ignite 客户端将缓存条目放在特定服务器(例如 E)上?
【问题讨论】:
做到这一点的唯一方法是实现您自己的Affinity Function,而不是开箱即用提供的那些。但是,我建议您重新考虑这种方法,因为它不可扩展。 Ignite 中包含的关联函数旨在在任何节点集上提供均匀分布,因此您可以在需要时动态地向上和向下扩展。你的方法不太灵活。
另外,我建议您浏览有关 Affinity Collocation 的文档页面。这很可能会为您提供有关如何以更好的方式实现逻辑的提示。
最后,您能否提供更多有关您的用例的详细信息?我很乐意就如何处理它提供一些建议。
【讨论】:
Affinity API 来完成,可以通过Ignite.affinity() 方法获取。但是要发送并置的闭包,您可以简单地使用 IgniteCompute.affinityRun() 和 IgniteCompute.affinityCall() 方法。
Affinity API 手动计算映射。我只是说affinityRun()、affinityCall() 会自动为你完成这项工作。这些方法还确保在您的计算完成之前不会驱逐分区。