Apache Ignite中大量相似性调用的有效组合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Ignite中大量相似性调用的有效组合相关的知识,希望对你有一定的参考价值。
我们想在Ignite中计算一个大的,可分区的数据集或'产品'(100.000+个产品,每个都链接到不同缓存中的大量额外数据)。我们需要几个用例:
1]启动计算工作,该工作仅限于大量(100's)产品,并且重点关注响应时间(<200ms)。我们可以使用产品ID作为关联键,以将所有额外数据与产品并置。但是affinityRun
只允许指定一个键,这意味着我们需要启动100个计算任务。理想情况下,我们将能够一次对整个产品ID集合执行affinityRun,并让Ignite将计算作业分配到相关节点,但是我们很难找到一种方法来做到这一点。 (然后,计算作业将仅在那些计算节点上使用本地查询。)
2)以有效的方式在整个产品空间中启动计算作业。我们可以在每个计算节点上启动计算作业并使用本地查询,但是在主分区不可用的情况下,这将不再为我们提供回退到备份分区的好处。这是问题1的极端情况,只是输入了大量(全部)产品ID。
我们已经为此进行了集思广益,但似乎我们缺少了一些东西。有什么想法吗?
关联性作业只不过是在键/值所在的数据节点上执行的作业。有几种将作业发送到特定节点的方法,而不仅仅是亲和力密钥。例如,您可以基于不一致的ID发送邮件,并且在2.4.10中(如果我没记错的话),它们添加了显式查询备份的方法。关于你的情况,我可以想到下面的解决方案-
SqlFieldsQuery query = new SqlFieldsQuery("select productID from CacheTable").setLocal(true);
您可以使用上面的SQL准备相似性作业,在其中您将选择所有产品(仅从该节点)并对其进行迭代,并仅在本地进行所有查询以获取所有此类产品信息。将该作业发送到所需的节点,然后进行计算并减少结果,然后返回给客户端。
[具有affinityRun
的版本需要partition number as a parameter。将任务分配给每个分区,接收端的每个节点将处理该分区号中的数据(只需对分区运行扫描查询)。万一发生故障,您只需重新启动分区的过程即可使用自定义逻辑过滤掉已处理的项目。
以上是关于Apache Ignite中大量相似性调用的有效组合的主要内容,如果未能解决你的问题,请参考以下文章