我是Apache Ignite的新手,来自数据仓库背景。 如果我尝试通过DBMS术语与Ignite联系,请原谅我。 我已经通过论坛,但我仍然不清楚一些基础知识。
我也想了解我稍后发布的方案的具体答案。
1。)CacheMode = PARTITIONED a。)当缓存被声明为分区时,数据是否相同 默认情况下跨所有节点分区?
b。)是否可以根据数据提供“分区键” 会分布在各个节点上吗?这就是我们所说的亲和力 键?
c。)分区如何与亲和力不同,缓存可以兼具 分区和关联密钥?
2。)亲和力概念 定义了Affinity Key后,当我将数据(使用loadCache())加载到分区缓存中时,源行是否会被发送到它们所属的节点或集群上的所有节点?
3.。)如果我在缓存上创建一个索引,默认情况下是否成为分区/ 亲和键也是?在这种情况下,分区如何与索引不同?
SCNEARIO DESCRIPTION
我想使用loadCache()将数据从持久层加载到Staging Cache(假设~2B)。缓存驻留在4节点群集上。 a。)如何加载数据,使每个节点只处理0.5B记录? 是使用分区缓存模式还是定义关联密钥?
然后我想在TRANSACTIONAL原子模式下从Staging Cache读取事务,查找目标Cache并执行一些操作。
b。)当我在目标高速缓存上进行查找时,如何确保仅在数据所在的节点上进行查找,而不是在目标高速缓存所在的所有节点上进行查找? 那会使用AffinityKeyMapper API吗?如果有,怎么样?
c。)假设我想对Affinity Key列以外的其他键进行查找,可以在查阅列帮助中创建索引吗?在这种情况下,我最终会扫描所有节点吗?
暂存缓存 顾客ID CustomerEmail CustomerPhone
目标缓存 SEQ_NUM 顾客ID CustomerEmail CustomerPhone 开始日期 EndDate
答案 0 :(得分:0)
Apache Ignite用户论坛上回答了这个问题:http://apache-ignite-users.70518.x6.nabble.com/Understanding-Cache-Key-Indexes-Partition-and-Affinity-td11212.html
分区 - >节点映射确定分区的主节点和备份节点。它不需要数据配置,而是节点之间的备份和分区分配
Cache.loadCache只是让所有节点都调用localLoadCache方法。其中调用CacheStore.loadCache。因此,每个网格节点都将从缓存存储中加载所有数据,然后丢弃非本地节点的数据。
如果使用备份,则相同的数据可能驻留在多个节点上。 AffinityKey应该是条目键的一部分,如果配置了AffinityKey映射,那么将使用AffinityKey而不是条目键进行入口 - >分区映射 和AffinityKey将被传递给AffinityFunction。
索引始终与数据位于同一节点上。
一个。要实现此目的,您应该实现CacheStore.loadCache方法来加载某些分区的数据。例如。您可以为数据库中的每一行存储partitionID。 但是,如果更改AF或分区编号,则还应更新数据库中条目的partitionID。
另一种方式。如果它是可行的,您可以在单个节点中加载所有数据,然后将其他节点添加到网格中。数据将自动在节点上重新平衡。
湾始终使用AffinityKey,因为它应该是条目键的一部分。因此,查找将始终发生在数据所在的节点上。
℃。我无法理解这个问题。请您澄清它是否仍然存在?