【问题标题】:Join Query in Apache Ignite在 Apache Ignite 中加入查询
【发布时间】:2019-03-07 06:08:22
【问题描述】:

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

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

【问题讨论】:

    标签: ignite


    【解决方案1】:

    不同缓存的分区之间没有对应关系。如果你运行一个连接操作,那么默认情况下只会执行本地查找。如果数据没有并置,那么这种方法可能会给你一个部分结果。

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

    推荐的连接方式是以一种不需要分布式连接的方式来配置数据。 Ignite 有一个名为affinity collocation 的功能,专为此目的而设计。您可以指定对象的一个​​字段,该字段将用于计算亲和力函数。该字段的值不必是唯一的,但它应该是键的一部分。所以,如果你想在两个表上执行连接,你可以通过亲和性来配置它们,这样就不需要分布式连接了。

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多