loadCache()和localLoadCache()以及缓存内部存储数据的逻辑

时间:2016-08-25 13:52:35

标签: caching persistent-storage ignite

这些天我做了一些关于loadCache,localLoadCache和来自缓存的查询数据的实验。但是,我越来越困惑。这是我的谜题。如果您知道如何解释,请帮助我。

  1. loadCache和localLoadCache之间有什么区别?
  2. 缓存存储数据的逻辑是什么?例如,我启动一个名为“A”的节点,其缓存存储来自DB中的表Person的一些数据(假设10个项目)。然后在代码中我让它每隔5秒从缓存中查询数据。 然后我启动一个名为“B”的新节点,其缓存存储DB中表Person的20个其他项数据,并让它每5秒从缓存中查询数据。但是,为什么查询“A”和“B”中的数据是30项数据(10 + 20的总和)?

  3. 如果我让B将新商品数据放入缓存中,然后“A”也可以查询新数据?当我关闭B时,A会查询10项数据,这意味着它与第一项相同。为什么?

1 个答案:

答案 0 :(得分:0)

Ignite是一个分布式数据存储。它对您的数据集进行分区,并在可用节点之间平均分配。例如,如果您有30个条目和2个节点,则每个节点上将有大约15个条目。所有权由Ignite自动定义,您无法决定在何处存储特定条目(嗯,您可以,但这非常重要)。

话虽如此,当表被加载到缓存中时,它被视为单个数据集。当您从缓存中获取条目时,无论它存储在何处,它都将被透明地返回。

至于加载,过程如下:

  1. 每个节点独立地从数据库中提取整个表并遍历行。
  2. 对于每一行,CacheStore实现都会创建键和值对象,并将它们传递给缓存。
  3. Cache确定此特定键值对是否属于本地节点。如果是,则保存。如果没有,则将其丢弃。
  4. 因此,该表将以分布式方式完全存储在集群中,每个节点都将拥有自己的数据子集。
  5. localLoadCache方法仅在本地节点上执行此过程(在某些特定情况下很有用)。 loadCache基本上只是一个广播闭包并在所有节点上调用localLoadCache的快捷方式,因此它会触发分布式数据加载。

相关问题