在Apache Ignite中加入查询

时间:2018-10-02 06:08:22

标签: ignite

在PARTITIONED模式下如何在节点之间执行空间联接查询?当Ignite使用Rendezvous Affinity哈希在节点之间分区数据(默认值为1024)时,如何在分区之间执行联接操作?假设我在缓存中有两个空间数据集(pCache和qCache),每个数据集包含10个分区(1,..,10)。 ignite如何在这两个数据集上执行联接操作?是pCache的partition1和qCache的partition1吗?

我的第二个问题:在分布式连接的情况下,ignite如何执行相同的操作?

1 个答案:

答案 0 :(得分:0)

不同缓存的分区之间没有对应关系。如果运行联接操作,则默认情况下将仅执行本地查找。如果未并置数据,则此方法可能会产生部分结果。

执行全部映射时,每个节点都必须与其他每个节点进行通信,因此O(N^2)消息将在群集中完全发送,其中N是节点数。这称为distributed joins,它会显着影响性能。如果是JDBC驱动程序,则可以在connection string中启用它;如果是缓存查询API,则可以使用SqlFieldsQuery#setDistributedJoins(...)方法来启用它。

推荐的进行联接的方法是以不需要分布式联接的方式并置数据。 Ignite具有一个名为affinity collocation的功能,专门为此目的而设计。您可以指定对象的字段,该字段将用于计算亲和力函数。该字段的值不必是唯一的,但它应该是键的一部分。因此,如果要在两个表上执行联接,则可以按亲缘关系并置它们,因此不需要分布式联接。