Apache Ignite 缓存加载需要时间

问题描述 投票:0回答:1

我们在 Apache Ignite 缓存中有 20 个缓存,每个缓存有 2 个备份。

每个缓存代表一张表。

每个缓存的关联键是客户 ID。

架构设计为一个客户所有缓存属于ignite集群中的一个节点,避免多节点查询。

第一次缓存加载对于 4 个缓存来说花费了太多时间,因为这 4 个表有大约 30 多百万条记录,每个表最多有 7 列,大多数列类型都是数字,很少有日期。

缓存加载需要 2 小时。 有什么有效的方法来加载缓存吗?

而且数据分布不均匀,一个节点具有大量数据,而其他节点的记录数较低,有时会导致堆问题。

java spring-boot caching ignite
1个回答
0
投票

在我看来,这是由于您所定位的具体问题而导致亲和键选择不当的一个示例。为了获得并行性的好处,您希望/需要不同客户的数据在集群节点之间尽可能均匀地分布。良好的关联键具有许多不同的值,不是 5、10 或 20,而是数千或数百万。但是给定两个要连接的表,两个表的连接记录将位于同一主机上。请注意,这与在单个主机上拥有 1 或 2 个客户数据有很大不同。当数据均匀分布但可以有效地连接时,集群中的所有主机都可以有效地协同工作来回答有关任何客户的问题,在这种情况下,您可以获得每台主机处理较小数据集的好处。 Net/net 是您的问题是由于亲和键选择不当造成的。这是一篇可能有帮助的文章:https://www.gridgain.com/resources/blog/micro-learning-unit-colocation-and-data-affinity-apache-ignite

© www.soinside.com 2019 - 2024. All rights reserved.