Ignite 了解缓存键、索引、分区和关联w.r.t读写

Ignite 了解缓存键、索引、分区和关联w.r.t读写,ignite,partition,gridgain,affinity,Ignite,Partition,Gridgain,Affinity,我是ApacheIgnite新手,来自数据仓库背景。 所以,如果我试图通过DBMS术语与Ignite联系起来,请原谅。 我已经通过论坛,但我仍然不清楚的一些基本知识 我还想知道我稍后发布的场景的具体答案 1.)缓存模式=已分区 a、 )当一个缓存被声明为分区时,数据是否得到同样的处理 默认情况下是否跨所有节点进行分区 b、 )是否有提供“分区键”的选项,该键是数据的基础 会分布在节点上吗?这就是我们所说的亲和力吗 钥匙 c、 )分区与关联有何不同?缓存可以同时具有这两种功能吗 分区和关联密钥 2

我是ApacheIgnite新手,来自数据仓库背景。 所以,如果我试图通过DBMS术语与Ignite联系起来,请原谅。 我已经通过论坛,但我仍然不清楚的一些基本知识

我还想知道我稍后发布的场景的具体答案

1.)缓存模式=已分区 a、 )当一个缓存被声明为分区时,数据是否得到同样的处理 默认情况下是否跨所有节点进行分区

b、 )是否有提供“分区键”的选项,该键是数据的基础 会分布在节点上吗?这就是我们所说的亲和力吗 钥匙

c、 )分区与关联有何不同?缓存可以同时具有这两种功能吗 分区和关联密钥

2)亲和力概念 定义了关联键后,当我将数据(使用loadCache())加载到分区缓存中时,源行将被发送到它们所属的节点还是集群上的所有节点

3.)如果我在缓存上创建一个索引,默认情况下它会成为分区吗/ 还有亲和力密钥吗?在这种情况下,分区与索引有何不同

SCNEARIO说明

我想使用loadCache()将数据从持久层加载到暂存缓存(假设~2B)。缓存位于4节点群集上。 a、 )如何加载数据,使每个节点只需处理0.5B条记录? 是通过使用分区缓存模式并定义关联键实现的吗

然后我想以事务原子模式从暂存缓存中读取事务,查找目标缓存并执行一些操作

b、 )在对目标缓存执行查找时,如何确保仅在数据所在的节点上执行查找,而不在目标缓存所在的所有节点上执行查找? 这会使用AffinityKeyMapper API吗?如果是,如何进行

c、 )假设我想查找非关联键列的键,在查找列上创建索引是否有帮助?在这种情况下,我会扫描所有节点吗

暂存缓存 客户ID 客户邮件 客户电话

目标缓存 序号 客户ID 客户邮件 客户电话 起始日期
EndDate

这在Apache Ignite用户论坛上得到了回答:


  • Ignite使用AffinityFunction[1]进行数据分发。AF实现了两个映射:键->分区和分区->节点。 键->分区映射肯定是分区的映射项。它不需要备份,只需要在分区上进行数据配置\分布。 通常,entry键(实际上是hashcode)用于计算分区条目所属的分区。 但您可以使用AffinityKey[2],它将用于管理数据配置。另请参见“org.apache.ignite.cache.affinity.AffinityKey”javadoc
  • 分区->节点映射确定分区的主节点和备份节点。它不需要数据配置,只需要备份和节点之间的分区分布

    loadCache只是让所有节点调用localLoadCache方法。它调用CacheStore.loadCache。因此,每个网格节点都将从缓存存储中加载所有数据,然后丢弃该节点的非本地数据

  • 如果使用备份,相同的数据可能驻留在多个节点上。AffinityKey应该是entry key的一部分,如果配置了AffinityKey映射,则AffinityKey将代替entry key用于entry->partition映射 AffinityKey将被传递给AffinityFunction

  • 索引总是和数据驻留在同一个节点上

  • a。要实现这一点,您应该实现CacheStore.loadCache方法来加载特定分区的数据。例如,您可以为数据库中的每一行存储分区ID。 然而,若您更改了AF或分区号,那个么也应该为数据库中的条目更新分区ID

    相反。如果可行,您可以在单个节点中加载所有数据,然后将其他节点添加到网格中。数据将自动在节点上重新平衡

    b。如果AffinityKey应该是entry键的一部分,则始终使用AffinityKey。因此,查找将始终发生在数据所在的节点上


    c。我不明白这个问题。请您澄清一下它是否仍然是真实的吗?

    这在Apache Ignite用户论坛上得到了回答:


  • Ignite使用AffinityFunction[1]进行数据分发。AF实现了两个映射:键->分区和分区->节点。 键->分区映射肯定是分区的映射项。它不需要备份,只需要在分区上进行数据配置\分布。 通常,entry键(实际上是hashcode)用于计算分区条目所属的分区。 但您可以使用AffinityKey[2],它将用于管理数据配置。另请参见“org.apache.ignite.cache.affinity.AffinityKey”javadoc
  • 分区->节点映射确定分区的主节点和备份节点。它不需要数据配置,只需要备份和节点之间的分区分布

    loadCache只是让所有节点调用localLoadCache方法。它调用CacheStore.loadCache。因此,每个网格节点都将从缓存存储中加载所有数据,然后丢弃该节点的非本地数据

  • 如果使用备份,相同的数据可能驻留在多个节点上。AffinityKey应该是entry key的一部分,如果配置了AffinityKey映射,则AffinityKey将代替entry key用于entry->partition映射 AffinityKey将被传递给AffinityFunction

  • 索引总是和数据驻留在同一个节点上

  • a。要实现这一点,您应该实现CacheStore.loadCache方法来加载特定分区的数据。例如,您可以为数据库中的每一行存储分区ID。 然而,若您更改了AF或分区号,那个么也应该为数据库中的条目更新分区ID

    相反。如果是我