开篇说的是,Shared-nothing当前已经是主流的架构,需要用自身的local disks来存储数据,Tables被水平划分到各个partitions上

这种架构,比较适合star-schema,即事实表外只有一层维表,这样join会比较简单,可以把维表广播,避免大量的数据传输

这个架构的主要问题就是,计算和存储没有分离

带来的问题,他说了几点,我的理解主要是,

首先资源利用会不合理,因为存储和计算任意资源不足,都需要增加节点,而且各个节点上很容易产生热点,热点打散比较麻烦,因为需要分割数据

最关键的是,这个架构在每个node上都有状态,存在本地磁盘,需要保证一致性

扩缩容非常的麻烦,有可能需要迁移数据和分割数据,这个成本非常的高

这篇文章的主要的思想,就是做了计算和存储分离

数据直接放到S3上,

那么本地磁盘仅仅用于cache

Snowflake整体的架构分3层,

Data Strorage

数据主存储用的是S3,会有更高的延迟,更大cpu消耗,尤其是用https的时候

而且S3是对象存储,无法append,当然读的时候是可以读部分数据

Compared to local storage, S3 naturally has a much higher access latency and there is a higher CPU overhead associated with every single I/O request, especially if HTTPS connections are used.

But more importantly, S3 is a blob store with a relatively simple HTTP(S)-based PUT/GET/DELETE interface. Objects i.e. les can only be (over-)written in full. It is not even possible to append data to the end of a le.

In fact, the exact size of a le needs to be announced up-front in the PUT request. S3 does, however, support GET requests for parts (ranges) of a le.

Snowflake把table分成large immutable files,列存格式,高压缩,有header

但没解释如何解决append的问题,高延迟的问题

S3还会作为临时存储放中间结果

Meta是放在KV里面,这部分属于管控

Virtual Warehouses

计算节点,因为存储分离出去了,所以这里纯粹的计算节点

用EC2组成cluster,作为一个VW,用户只能感知到VW,不知道底下有多少ec2的worker node

这里为了便于用户理解,规格直接用类似T-shirt的,X,XXL,很形象

VM是无状态的,纯计算资源

所以这样设计就很简单了,快速扩缩容,failover

用户可以有多个VM,但是底下针对一个相同的存储,VM之间资源是隔离的,所以可以做到不同的query间不干扰

Worker只有在真正查询的时候,才会启动查询进程

为了降低读取S3的延时,在本地磁盘对读取过的文件做了cache,会cache header和读取过的column的数据,这里就采用的比较简单LRU策略

为了让cache更有效,要保证需要读取相同数据的query被分发到相同的worker node,所以这里采用一致性hash来分发query

这里一致性hash是lazy的,意思就是不会搬数据,因为本身cache,所以无所谓,变了就重新建cache,老的等LRU过期

由于Worker是纯计算节点,数据都在S3,所以他处理skew,数据倾斜问题就非常简单,我做完了,可以帮peer做他没有做完的;如果是share-nothing就比较麻烦了,数据倾斜是很讨厌的问题

ExecutionEngine
高效的执行引擎,

基于Columnar,可以更好的利用CPU和SIMD

向量化,不会物化中间结果,采用pipiline的方式,参考MonetDB的设计

Push,operator间通过push,streaming的方式

Cloud Services

管控服务,

多租户共用,每个service都是长生命周期和shared,保证高可用和可扩展

查询管理和优化

所有查询都需要通过CloudService,并会在这完成parsing,optimization的阶段
这里优化用的是Top-down Cascades的方式

由于Snowflake没有index,而且把一些优化放到了执行阶段,比如join数据的分布,所以搜索空间大大降低,同时提升了优化的稳定性
其实说白了,弱化了查询优化部分,把部分工作放到执行引擎中

然后后面就是典型的MPP的过程,把执行计划下发到各个workers,并监控和统计执行状况

并发控制

通过Snapshot Isolation来实现事务机制
这里SI是通过MVCC实现的,这是一个自然的选择,对于S3只能整个替换files,每个table version对应于哪些file,由在kv中的metadata管理

传统的数据库,通过索引来检索数据,这里说索引的问题,比如随机读写,overload重,需要显式创建

所以对于AP场景,一般不会选择建B tree这样的索引,而选择顺序扫描数据,所以才有pruning的问题
如果要高效的pruning,需要知道这块数据到底需不需要扫描,是否可以跳过,所以会在header中加上很多的统计,min,max等

4. Feature Highlights

Pure Software-as-a-Service Experience

Continuous Availability,存储和计算分离后,数据的一致性交给S3来保证,只需要保证无状态的计算节点的高可用,没有什么好说的

Semi-Structured and Schema-Less Data

Time Travel and Cloning,由于mvcc,旧版本不删除,自然就支持Time Travel

Security

这篇论文,除了给出计算和存储分离的架构,没有特别的创新的地方,其他的技术都是common sense,在计算和存储分离部分的细节也没有详细描述


The Snowflake Elastic Data Warehouse的更多相关文章

  1. Data Warehouse

    Knowledge Discovery Process OLTP & OLAP 联机事务处理(OLTP, online transactional processing)系统:涵盖组织机构大部 ...

  2. 混合 Data Warehouse 和 Big Data 倉庫的新架構

    (讀書筆記)許多公司,儘管想導入 Big Data,仍必須繼續用 Data Warehouse 來管理結構化的營運數據.系統記錄.而 Big Data 的出現,為 Data Warehouse 提供了 ...

  3. Azure SQL Data Warehouse

    Azure SQL Data Warehouse & AWS Redshift Amazon Redshift Amazon Redshift 是一种快速.完全托管的 PB 级数据仓库,可方便 ...

  4. 场景4 Data Warehouse Management 数据仓库

    场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...

  5. 浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案

    作者 王枫发布于2014年2月19日 综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个 ...

  6. 转:浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案

    综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个时代决胜未来的关键因素,而基于大数据的 ...

  7. DataBase vs Data Warehouse

    Database https://en.wikipedia.org/wiki/Database A database is an organized collection of data.[1] A ...

  8. data warehouse 1.0 vs 2.0

    data warehouse 1.01. EDW goal, separate data marts reqlity2. batch oriented etl3. IT driven BI - das ...

  9. Azure SQL 数据库仓库Data Warehouse (1) 入门

    <Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...

随机推荐

  1. 使用Beef劫持客户端浏览器并进一步使用Beef+msf拿客户端shell

    环境: 1.Kali(使用beef生成恶意代码,IP:192.168.114.140) 2.一台web服务器(留言板存在XSS跨站脚本漏洞,IP:192.168.114.204) 3. 客户端(用于访 ...

  2. 英语hecatolite月长石hecatolite月光石

    月长石英文名字为hecatolite即月光石.当白色的光照到宝石上因宝石内特殊的结构而产生干涉颜色,在宝石表面可见到白至淡蓝色的闪光,犹如朦胧月光.这是由于正长石出溶有钠长石,钠长石在正长石晶体内定向 ...

  3. 在windows 10 64位系统下安装TensorFlow

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/mao_hui_fei/article/de ...

  4. Linux命令head

    1.命令简介 head (head) 用来显示档案的开头至标准输出中.如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头.如果不指定文件,或者文件为"-",则从标准输入读 ...

  5. 缓冲加载图片的 jQuery 插件 lazyload.js 使用方法详解

    在写代码的时候,经常会用到懒加载的模式,以前是通过window.onload的模式去加载,但是图片很多或者用ajax请求的时候,就会很麻烦,现在用lazyload的模式加载方便很多 <!doct ...

  6. Kotlin匿名函数与闭包详解

    Lambda表达式实例演练: 继续先来编写一些Lambda表达式相关的代码: 接下来想从上面的字符串数组中找到带有"h"的字符串并打印出来: 如果学习了Java8的Lambda表达 ...

  7. 那周余嘉熊掌将得队对男上加男,强人所男、修!咻咻! 团队的Beta产品测试报告

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:Beta阶段团队项目互评 团队名称: 那周余嘉熊掌将得队 作业目标:项目互测互评 队员学号 队员姓名 博客地址 备注 221600131 ...

  8. beta冲刺(4/7)

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:项目beta冲刺(团队) 团队名称: 那周余嘉熊掌将得队 作业目标:beta(4/7) 队员学号 队员姓名 博客地址 备注 221600 ...

  9. 【坑】js语法中一些小细节 不注意也出坑 随笔记下 留待后查

    1.switch case内 区分数字 与 字符 ',bl; switch(+lv){ :bl = 1.7;break; :bl = 1.55;break; :bl = 1.4;break; ; } ...

  10. WHAT IS GAME-BASED LEARNING?

    https://www.growthengineering.co.uk/what-is-game-based-learning/ Gamification and game-based learnin ...