Snowflake-具有数据新鲜度的缓存



我读了很多关于雪花缓存的文章,但不明白雪花是如何解决其他"共享一切架构";。我的理解是,当数据发生变化时,共享所有内容,本质上需要一些锁定。

如本文所述:

为了提高效率,两个节点都在内存中缓存了记录1的本地副本。然后,客户端尝试更新记录1,使"foo"变为"bar"。为了以一致的方式做到这一点,DBMS必须对可能缓存了记录1的所有节点进行分布式锁定。随着集群中机器数量的增加,这种分布式锁变得越来越慢,因此可能会阻碍写入过程的可扩展性。

换句话说,如果雪花在计算层缓存数据,但S3中的底层数据发生了变化,那么雪花不是遇到了其他共享一切架构的相同缓存问题吗?我知道在分析数据库中,更新较少,但为什么传统的共享一切架构不起作用呢?

我看到的唯一答案是snowflake有一个查询优化器,它可以检查底层数据是否发生了更改。但仍然不明白这是传统共享数据库对缓存策略的重大升级。

我相信这里缺少的关键概念是Snowflake从不更新记录。。。曾经相反,它会创建一个新的Micro分区,其中包含旧Micro分区中应用了更改的所有数据。通过这种方式,Snowflake的服务层立即知道仓库缓存中的Micro Partition不再有效,因为根据服务层,它不再是活动的。

你唯一需要锁的时候就是";更新";高速缓存或底层数据。这在这里从来没有发生过。更新语句一完成,新的微分区就会变为活动分区。当更新正在运行时;脏的";数据的状态,因此针对该表运行的任何查询都将始终是更新运行时的前一状态或更新后的状态。不需要锁。

这能回答你的问题吗?

最新更新