<audio id="audio" title="096 | Snowflake:云端的弹性数据仓库" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a8/5f/a8b110426589d8ef1816c0466487ee5f.mp3"></audio>

Snowflake是一个初创公司，也是一个完全基于云端构建的弹性数据仓库。它是大数据时代数据分析的一个重要的公司。今天我们来聊聊这个公司。

Snowflake成立于2012年，总部设在加州下属的一个小城市圣马特奥。Snowflake的创始人是本纳特·达格维尔（Benoit Dageville）, 蒂里·克鲁安纳（Thierry Cruanes ）以及马尔辛·茹科夫斯基（Marcin Zukowski）。这三位都是欧洲人，不过，现在都在美国发展。

本纳特早年在欧洲计算中心做研究，主要工作是并行数据库。后来，他来到了Oracle公司发展，并在Oracle待了16年。前6年是负责领导Oracle的并行执行引擎组，后面10年一直在做Oracle的架构师。

在Oracle里，架构师是一个明确的级别，这个级别非常不容易达到，需要公司里所有架构师全部同意才能晋升。能够在Oracle里面做到这个位置的，自然是非常厉害的人。

蒂里也是欧洲人，他在巴黎攻读完成数据库方向的博士，来到美国之后，先在IBM工作了四年，又在Oracle工作了12年，也是一位资深的数据库专家。

马尔辛和这两位比起来就是年轻一辈了。他在阿莫斯特丹大学获得博士学位，博士期间做的内容是著名的Monet DB/X100。毕业后，他创业成立了Vectorwise，后来公司被卖给了Ingres，他也随之到了Ingres工作，一段时间以后才来到了湾区。

从三个创始人的经历来看，他们都是在数据库方向的专家，有多年的积累与经验。Snowflake便是一个由这样的团队创建的数据库公司。它在成立之后一直都处于保密的状态。直到两年后的2014年10月，公司才正式宣布了他们的产品，同时宣布的还有他们的CEO。

Snowflake的CEO不是三个创始人中的任何一个。他叫鲍博·穆格里亚（Bob Muglia）。这个人在微软的第一份职务是SQL Server的项目经理，之后逐渐升职，直至最后做到了微软的资深副总裁。

2011年，他离开微软。根据后来公布的信息来看，他和当时微软副总裁史蒂夫·鲍尔默（Steve Ballmer）之间就公司的云计算发展产生了冲突。

了解了公司的主创人员和管理人员之后，我们来看看Snowflake的产品。Snowflake的产品主要是一款基于云的数据仓库。2014年发布的时候，所谓的云当然是指亚马逊的AWS。确切地讲就是S3的存储和EC2的虚拟机。

这款数据库是由Snowflake的成员从头开发的。它的主要想法是存储和计算要分离。Snowflake的数据被压缩以后存在亚马逊的S3上，每个文件的大小大约是16MB。文件的格式是列存，每个列被单独存成文件。

当数据需要处理的时候，Snowflake的处理引擎会启动EC2的虚拟机，虚拟机从S3读取数据，然后使用本地的磁盘作为数据的缓存。如果多个数据查询发生，每个数据查询的执行引擎在本地各保留了一份数据。当然查询结果被写回S3的时候，如果两个查询需要更新同一张表，Snowflake有某种写保护方式避免数据写入发生冲突。

Snowflake一出来的时候，它就号称自己的SQL支持SQL1998和SQL2003里面的大部分分析函数。它的数据库产品和SQL的兼容性好，Snowflake的数据模型并非只是基于纯粹的关系数据库，它同时也支持半结构化的数据。

不过，作为一个数据仓库产品，Snowflake本身并不支持索引。当然Snowflake还是会对每个文件记录最大最小值，这些信息可以用来让优化器过滤一部分的数据读取。

Snowflake的收费方式主要有两种，一种是存储的钱，这个按月收费。另外一种块是EC2上跑处理程序的时间，用了多少收多少。

Snowflake有很多不同档次的收费计划，其区别主要是数据库里面保存了多少个以前的版本。比较低级的计划只保存了1天的，而比较高级的计划可以最多保存90天内的所有版本。

从技术角度来讲，Snowflake的实现方式，因为是从头开始搭建的，所以它能够很好契合云计算的架构，也就是存储和计算分离。

Snowflake和亚马逊之间的关系，最初是很友好的合作关系。但是后来亚马逊进军了数据库市场，并推出了Redshift。Redshift作为一个云端的数据库产品，由亚马逊自己提供，并且与自家的S3做了整合。

亲儿子和干儿子之间的区别是很明显的。尤其是当亚马逊今年推出了Redshift Spectrum以后，Redshift就具备了扫描S3文件进行查询的能力了。这个能力让Snowflake使用S3作为廉价存储的梦想受到了打击。

总而言之，现在整个云计算市场上最为明显的竞争对手肯定是Redshift，这一点，Snowflake多少还是感觉到了威胁的。

为了应对这种变化，Snowflake的做法是在西雅图成立了分部。Snowflake在西雅图的分部主要从微软Windows Azure招人，为的是在Windows Azure的存储和虚拟机上实现类似于自己在亚马逊上提供的服务。

大概是2016年下半年，Snowflake从微软的某个云计算部门挖了一个经理，开始组建这个部门。之后陆陆续续的，公司在西雅图的部门逐渐扩展到了10多个人。并在2016年底进军Windows Azure市场。

Snowflake有一些固定的客户，它的商业模式里面，最大的不确定因素是如果云计算厂商自己也想抢Snowflake想做的生意。云厂商对自己的存储和计算服务最熟悉。第三方开发怎么样也不可能比自己开发得到更多的支持。这是Snowflake尴尬的地方。那么，Snowflake要如何打赢这场仗。

当亚马逊做了Redshift之后，Snowflake还是可以去做Windows Azure上面的生意。如果微软也介入这个市场，Snowflake是不是只能去做谷歌的生意呢？如果要是谷歌也介入这个市场，Snowflake怎么办？

从这个角度来讲，云计算的数据库服务如果没有底层基础平台的话，要想在竞争对手的围攻下胜利，是一件不容易的事情。

在云计算上非常成功的应用软件厂商Salesforce，它之所以没有倒下，很大程度上也是因为它的服务是跑在自己的基础架构上，而不是AWS或者微软的服务上的。虽然Salesforce最近也在和AWS合作紧密，主要还是亚马逊目前没有进入企业CRM市场的打算。

而当亚马逊或者微软自己也介入到同样的业务里面来的时候，这种竞争关系就会非常麻烦了。第三方厂商既依赖云厂商提供的基础服务，又和云厂商的服务竞争。这对它们显然是不利的。

不过无论如何，作为第一个云端的弹性数据仓库，Snowflake还是获得了很多的关注。但是我想这个公司的未来，如果能够被某个云厂商收购了，可能会是最好的出路。


