1

我读过很多关于雪花缓存的文章,但不明白雪花如何解决其他“共享一切架构”遇到的数据新鲜度问题。我的理解是,当数据更改时共享所有内容,本质上需要一些锁定。

本文所述

为了提高效率,两个节点都在内存中缓存了记录 1 的本地副本。然后客户端尝试更新记录 1,以便“foo”变为“bar”。要以一致的方式执行此操作,DBMS 必须在可能已缓存记录 1 的所有节点上采用分布式锁。随着集群中机器数量的增加,这种分布式锁会变得越来越慢,因此可能会阻碍数据库的可扩展性。写作过程。

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

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

4

1 回答 1

1

我相信您在这里缺少的关键概念是 Snowflake 永远不会更新记录……永远。相反,它会创建一个新的微分区,其中包含旧微分区中应用了更改的所有数据。这样,Snowflake 的服务层立即知道仓库缓存中的微分区不再有效,因为根据服务层它不再处于活动状态。

唯一需要锁的情况是“更新”缓存或基础数据。这从来不会发生在这里。一旦更新语句完成,新的微分区就会激活。更新运行时,数据没有“脏”状态,因此针对该表运行的任何查询将始终是更新运行时的先前状态或更新后状态。不需要锁。

这是否回答你的问题?

于 2021-11-03T22:54:25.720 回答