Snowflake 弹性扩展计算2025年8月1日 | 阅读10分钟 传统数据仓库系统无法利用云的弹性,因为它们是为固定资源构建的,主要依赖复杂的ETL流程。它内置了对半结构化和无模式数据的扩展,并完全支持SQL。用户将数据上传到云后,可以立即使用熟悉的工具和界面对其进行管理和查询。 引言执行已从本地服务器转移到共享数据中心,这是很好的。但如果程序在云上弹性扩展,我们将从中受益。传统数据仓库软件需要更新。它旨在为小型、稳定、运行良好的计算机集群提供动力。 以下是Snowflake的显著特点。我们将在后面更详细地介绍它们。
存储与计算由于可扩展性和商用硬件,无共享架构提供了高性能数据仓库。 由于连接大型(分区)事实表与小型(广播)维度表所需的带宽非常少,因此此方法对于星型模式查询具有很好的可扩展性。该架构有一个主要缺陷。计算和存储资源紧密耦合。 这种耦合导致以下麻烦的情况。
出于这些原因,Snowflake将计算和存储分开。Snowflake的(专有)无共享引擎提供计算。Amazon S3用于提供存储。每个计算节点都会在本地磁盘上缓存一些表数据,以最大程度地减少计算节点和存储节点之间的网络流量。只有临时数据和缓存(这些是热数据)存储在本地磁盘上。它有助于实现出色的性能。 设计Snowflake旨在实现极高的可用性。该服务导向架构由高度容错且可独立扩展的服务组成,这些服务通过RESTful接口进行交互。 1.1 数据存储 由于AWS是成熟产品且拥有最大的用户群,Snowflake选择了它。与本地存储相比,S3的访问延迟和每个I/O请求的CPU开销明显更大。由于S3是Blob存储系统,文件只能整体(覆盖)写入。 每个表文件的标头都包含每个列的偏移量和元数据。由于S3允许对文件的部分进行GET请求,因此查询只需下载文件标头和必要的列。Snowflake将查询运算符生成的临时数据存储在S3上。 ![]() 通过将查询结果存储在S3中,简化了查询处理,并实现了新型的客户端交互。无需服务器端游标。可伸缩的事务性键值存储包含元数据,例如统计信息、锁、事务日志、目录项(表S3文件映射)等。云服务层包含该存储。 1.2 在线存储 EC2实例集群构成了虚拟仓库层。 虚拟仓库(VW)是一种抽象,用于将这些集群的每个集群暴露给其独特的(唯一)用户。我们将各种EC2实例称为工作节点。 1.2.1 隔离和弹性 VW是纯粹的计算资源。它们可以随时创建、删除或调整大小。每个查询都在单个VW上执行。大众汽车不共享工作节点。每个VW中的每个工作节点都会在收到新查询时启动一个新的工作进程。 每个工作进程只在其查询处于活动状态时存在。每个用户可以同时运行多个VW。所有VW都可以访问相同的共享表,而无需物理复制数据。这种弹性和隔离实现了某些新的用例。 1.2.2 文件窃取和本地缓存 在本地磁盘上,每个工作节点都保留表数据的缓存。表文件,更具体地说是文件头和单个文件列,构成了缓存。缓存会在工作节点的生命周期内保持活动状态。Snowflake采用一致性哈希来提高命中率并防止不必要的单个表文件缓存。 查询优化器使用表文件名称的一致性哈希将输入文件集分配给工作节点。Snowflake的一致性哈希是惰性的。当工作节点改变时,信息不会立即打乱。 1.2.3 执行引擎 节点效率在Snowflake中至关重要。Snowflake开发了自己尖端的SQL执行引擎,以提供最佳性能。与按行存储相比,列式存储更好。这是因为SIMD指令和CPU缓存得到更有效的使用。 ![]() 当使用向量化执行时,中间结果不会具体化。相反,使用流水线数据处理。它以列式格式分批执行数千行。这种方法显著提高了缓存效率,同时节省了I/O。 关系运算符将其结果推送到下游运算符称为基于推的执行。它提高了缓存效率,并消除了等待运算符获取数据的需要。 1.3 云服务 云服务层有多个租户。该层中的每项服务,包括事务管理器、查询优化器和访问控制,都由众多用户共享并具有较长的生命周期。 1.3.1 查询优化和管理 查询生命周期的所有初始阶段,包括解析、对象解析、访问控制和计划优化,都由云服务管理。Snowflake中的查询优化器采用经典的Cascades样式进行自上而下的基于成本的优化。 Snowflake的计划搜索空间比其他系统小,因为它不使用索引。优化器完成后,生成的执行计划会发送给查询中涉及的所有工作节点。 ![]() 为了收集性能指标并识别节点故障,云服务会持续监控查询状态。Snowflake图形用户界面允许用户跟踪和检查过去和当前的查询。 1.3.2 并发管理 云服务层专门负责并发控制。Snowflake通过快照隔离(SI)实现ACID事务。事务的所有读取都会看到数据库在事务开始时的一致快照。SI是在多版本并发控制(MVCC)之上实现的,考虑到表文件是不可变的,这是一种自然的选择。 表上的写入操作(插入、更新、删除、合并)通过相对于先前表版本添加和删除整个文件来生成表的更新版本。文件添加和删除在元数据存储中进行跟踪,这是一个事务性键值存储。Snowflake还使用快照来实现时间旅行和数据库对象的有效克隆。 1.3.3 修剪 大规模数据处理大多使用基于min-max的修剪技术。 它的其他名称包括数据跳过、区域映射和物化聚合。对于给定的数据集,系统在块中保留最小值和最大值。这些值有助于根据查询谓词确定特定查询是否需要特定数据。 ![]() 对于每个表文件,Snowflake保留有关修剪的元数据。除了这种静态修剪,Snowflake还在运行时执行动态修剪。 1.1 纯粹的软件即服务体验 Snowflake支持标准的数据库接口,如JDBC和ODBC。它兼容Looker、Informatica和Tableau等外部工具和服务。Snowflake提供了一个Web UI,可以方便地从任何地方和任何环境访问。 UI支持SQL操作、数据库目录访问、用户和系统管理、监控、数据使用等。 1.2 持续可用性 Snowflake提供持续可用性。它提供了两个技术特性 1.2.1 故障弹性 在架构的每个级别,Snowflake都能抵御相关和单个节点故障。S3是Snowflake的数据存储层。可用区是数据中心组,其中S3被复制。 1.2.2 在线升级 Snowflake在软件升级和故障期间提供不间断的可用性。得益于系统设计,可以并行部署不同服务的多个版本。每当修改元数据结构时,都保证与早期版本的向后兼容性。 1.3 无模式和半结构化数据 VARIANT、ARRAY和OBJECT是Snowflake添加到传统SQL样式系统中的三种半结构化数据形式。 如果需要,以后使用并行SQL数据库的全部功能(包括连接、排序、聚合和复杂谓词等操作)来执行转换的能力是ELT和Snowflake的另一个优点。 ![]() 1.3.1 关系后操作 从文档中提取数据块是最重要的活动。Snowflake提供了类似于JavaScript和函数式SQL符号的路径语法中的提取函数。由于固有的编码,提取非常有效。 1.3.2 列式处理和存储 正如Google Dremel和Apache Impala所展示的,半结构化数据的列式存储既可行又有利。Snowflake在存储半结构化数据时会自动对单个表文件中的文档组进行统计分析。 1.3.3 正向转换 字符串用于表示几种本地SQL类型,例如日期/时间值。这些值需要在写入时(在插入或更新期间)或读取时从字符串转换为其真实类型。 1.4 克隆和时间旅行 新版本删除的文件会保留一段可配置的时间。Snowflake可以有效地读取表的早期版本,这得益于文件保留。在数据库中,这被称为时间旅行。 1.5 安全性 Snowflake旨在在每个架构级别保护用户数据免受入侵。Snowflake实现了基于角色的数据库对象访问控制、安全数据传输和存储、加密数据导入和导出以及双因素身份验证(客户端)。数据在通过网络传输和存储在本地驱动器或共享存储(S3)之前会进行加密。 1.5.1 密钥层次结构 Snowflake采用基于AWS CloudHSM的层次密钥机制和强大的AES 256位加密。不需要配置或管理,加密和密钥管理对用户来说是完全透明的。 1.5.2 密钥生命周期 此外,Snowflake还限制了密钥的使用时间。 加密密钥经历四个阶段
限制发起者使用时间和接收者使用时间是阶段2的要求。Snowflake使用重新密钥来限制接收者使用期限,并使用密钥轮换来限制发起者使用期限。 相关的基于云的并行工作数据库系统
弹性云服务客户可以明确地扩展和配置Snowflake的计算层,该层管理查询执行,并以虚拟仓库的形式对客户可见。仓库的T恤尺寸(S、M、L等)对应于它们所包含的计算能力。还有动态大小的多集群仓库,允许Snowflake最大化仓库集群的数量。
![]()
GS集群管理器
![]() 以下是其优点和工作原理的摘要
当需求下降时,这些集群会减少或停止操作,以节省资金。 管理并发性
实时扩展扩展几乎是即时发生的,不会干扰正在运行的查询或过程。
Snowflake中弹性扩展数据仓库的应用
结论总之,我们可以得出结论,Snowflake的弹性扩展计算提供了一种强大且经济高效的方式来处理云中的各种动态工作负载。通过分离计算和存储、提供自动扩展和利用多集群拓扑,Snowflake提供了卓越的性能、并发性和灵活性。 对于寻求可扩展性而不牺牲效率的现代数据驱动型企业来说,其按使用付费的策略和即时扩展能力使其成为完美的解决方案。无论是用于商业智能、实时分析还是数据仓库,Snowflake的弹性扩展都使企业能够轻松适应不断变化的需求。 下一主题 |
我们请求您订阅我们的新闻通讯以获取最新更新。