Snowflake数据库调研及架构介绍

目录

 

简介

整体类别

存储

存储引擎

平台管理

架构

部署

自动化

文档

监控

资源

tps/qps,慢查询

管控

高可用,升级,提升配置

扩容

错误查询

性能

接口

sql增删改查

sql兼容性

应用

优势

约束

企业实例

附录


简介

https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

Snowflake是作为软件即服务(SaaS)提供的分析数据仓库。与传统的数据仓库产品相比,Snowflake提供了一个更快,更易于使用且更加灵活的数据仓库。Snowflake的数据仓库不是建立在现有数据库或Hadoop等“大数据”软件平台上的,Snowflake数据仓库使用新的SQL数据库引擎,该引擎具有为云设计的独特架构。对于用户而言,Snowflake与其他企业数据仓库有很多相似之处,但还具有一些其他特有功能。

整体类别

计算

计算+接口

计算+存储+接口

存储

https://zhuanlan.zhihu.com/p/56745552

https://zhuanlan.zhihu.com/p/126357511

Snowflake是一款面向Amazon Cloud上EC2和S3而构建起来的在线数仓系统,支持极致弹性、多租户、端到端安全、完整CRUD、事务、内置半结构化、无结构化数据等特性。

属于对象存储类型。

这里其实snowflake是做了较多的调研,包括hdfs,s3,最后的结论是发现s3在peformance,usabliity, high avaibability, strong durabllity guarantees hard to beat。所以存储层聚焦到virtual warehouse层的data cache和skew resilience。skew resilience指的是即使ecs的规格一样,但是由于网络、磁盘io等原因,还是会导致不同节点之间性能不均衡的问题,云计算超卖原罪。

底层选择S3解决了很多的存储问题,但在现阶段延时问题还是存在的,因此,针对热数据做本地SSD缓存+多级缓存是很自然的选择。因为VirtualWarehouse单元是用户级别的,所以这些热数据缓存可以被Query级、进程级、EC2级、用户级大量复用,从而极大的降低成本。

Snowflake选择在多个VW间构建Consistent Hashing的缓存层,来管理S3上的表文件和对应node节点(真正的计算节点)之间的关系;同时优化器感知这个缓存层,在做物理执行计划时,将query中的扫表算子按表文件名分派到对应的node上,从而实现缓存的高命中率;同时,因为存储计算分离+share data架构,计算上并不强耦合缓存层,所以node节点的增删并不需要立即做缓存数据的shuffle,而是基于LRU,在多个后续Query中摊还的替换表文件,完成缓存层的Lazy Replacement,平滑过渡。

S3无限容量+数据多副本+分布式强一致等,还给Snowflake带来更多红利。

S3的问题:

1. latency

2. cpu overhead,使用HTTP连接。http解包,封包

S3的优势:

1. 操作简单,put、get、delete

2. 文件只能被整个重写,甚至不能在文件末尾append,文件大小必须在put的时候指定。

3. Get可以取部分文件。

基于这些特性做了很多适配的设计

1. 表被水平划分成large,immutable文件,等同于传统数据库的block或者page;

2. 列或者属性使用PAX格式混合列存;

3. 每个文件有header,保存metadata;

4. 不仅仅使用s3作为table的存储,还使用s3保存临时数据(当节点的磁盘满的时候)

5. 大的query结果,因为结果可以全部写入s3,所以不需要传统数据库的curser

Metadata例如catalog对象,table由哪些s3文件组成,统计,锁,事务日志保存在一个kv存储里面,这个kv存储作为Cloud Services layer一部分。

 

存储引擎

https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

Snowflake数据仓库使用新的SQL数据库引擎,该引擎具有为云设计的独特架构。

https://www.sohu.com/a/411196821_185201?_trans_=000014_bdss_dkygcbz

(关于引擎的具体设计没有查到,Snowflake既无法建立索引,又不可捕获统计信息,更无法管理分区,能知道的引擎功能只有压缩很好)

https://zhuanlan.zhihu.com/p/126357511

snowflake自己实现了一个执行引擎,engine build is :

列存, 向量化,和push-based(这里针对是传统的火山模型)。这里并没有提code-gen。

  • 列存:对cpu cache更加友好,避免cache miss,能使用SIMD指令;
  • 向量化:避免雾化中间结果,相反数据是以pipeline的方式处理,数据以千行为单位一个batch一个batch处理,这种方式提高了IO效率和cache效率
  • Push-based:相比经典的火山模型。基于push的模型可以提高cache效率,因为他减少了loop的控制流,另外他还是snowflate可以有效的处理DAG类型的plan,相比于tree型执行计划,为sharing和pilelining中间结果创造了机会。

平台管理

架构

https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

Snowflake的架构是传统shared-disk数据库架构和shared-nothing数据库架构的混合体。

与shared-disk数据库架构相似,Snowflake数据仓库中所有计算节点访问的持久化数据使用中央数据存储库存储。

也与shared-nothing数据库架构相似,Snowflake使用MPP(大规模并行处理)计算集群处理查询,集群中的每个节点都在本地存储整个数据集的一部分。

这种方法简化了shared-disk数据库架构的数据管理,还具备shared-nothing数据库的性能和横向扩展优势。

架构概述

Snowflake的独特架构包括三个关键层:

数据库存储

将数据加载到Snowflake后,Snowflake会将数据重组为内部优化的压缩列式格式。Snowflake将此优化的数据存储在云存储中。

Snowflake管理着存储此数据的所有方面——组织(organization),文件大小,结构,压缩,元数据,统计信息,并且数据存储的其他方面由Snowflake处理。Snowflake存储的数据对象不直接可见,

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiky哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值