这些天我做了一些关于loadCache,localLoadCache和来自缓存的查询数据的实验。但是,我越来越困惑。这是我的谜题。如果您知道如何解释,请帮助我。
缓存存储数据的逻辑是什么?例如,我启动一个名为“A
”的节点,其缓存存储来自DB
中的表Person的一些数据(假设10个项目)。然后在代码中我让它每隔5秒从缓存中查询数据。
然后我启动一个名为“B
”的新节点,其缓存存储DB
中表Person的20个其他项数据,并让它每5秒从缓存中查询数据。但是,为什么查询“A
”和“B
”中的数据是30项数据(10 + 20的总和)?
如果我让B
将新商品数据放入缓存中,然后“A
”也可以查询新数据?当我关闭B
时,A
会查询10项数据,这意味着它与第一项相同。为什么?
答案 0 :(得分:0)
Ignite是一个分布式数据存储。它对您的数据集进行分区,并在可用节点之间平均分配。例如,如果您有30个条目和2个节点,则每个节点上将有大约15个条目。所有权由Ignite自动定义,您无法决定在何处存储特定条目(嗯,您可以,但这非常重要)。
话虽如此,当表被加载到缓存中时,它被视为单个数据集。当您从缓存中获取条目时,无论它存储在何处,它都将被透明地返回。
至于加载,过程如下:
CacheStore
实现都会创建键和值对象,并将它们传递给缓存。 localLoadCache
方法仅在本地节点上执行此过程(在某些特定情况下很有用)。 loadCache
基本上只是一个广播闭包并在所有节点上调用localLoadCache
的快捷方式,因此它会触发分布式数据加载。