<audio id="audio" title="145 | SAP的HANA战略（上）" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/3e/75/3ef8790596e40c61c8c3cc3464ed3675.mp3"></audio>

SAP是总部位于德国的全球最大的ERP公司。作为一家重量级的企业应用软件公司，SAP曾经有过一段风光的日子。

但是而后的日子也开始不好过起来。

日子不好过的主要原因是SAP的软件需要跑在数据库上，而备选的数据库一般来说不是IBM的DB2，就是Oracle。本来两者和SAP的软件配合，相得益彰，曾经一度合作得很愉快。但随着Oracle开始进军企业级软件市场，把手伸到SAP的地盘来，SAP的日子就开始不好过起来。

Oracle在21世纪初进行了一系列的并购，包括收购了Siebel和仁科等重要的企业级软件企业，把自己从底层数据库到企业级软件的体系补全了。这样一来，SAP就麻烦了，因为自己的软件依赖于对方的数据库，而对方却还能够提供类似的企业级软件。

好在还有一个IBM的DB2可以用。SAP一度和IBM合作，希望两者的结合可以给自己带来所谓的强强联合。但是IBM的DB2却一直面临着诸多问题，比如本身就不是市场上最好的数据库，人才流失又很严重。所谓的合作开展起来，效果却非常有限。

在这个背景下，SAP开展了一场技术与忽悠并存的战略大跃进，也就是SAP著名的HANA战略。HANA的出现对SAP和业界都产生了巨大的影响。其实施的过程可谓精彩绝伦，堪称一部大制作的“影片”。

今天我就来讲一讲这个SAP的HANA战略。

让我们先把时间倒回到2009年。这一年，数据库的两大顶级会议之一的SIGMOD在罗德岛召开。我最后一次以PhD的身份参加SIGMOD，所以对这个会议印象深刻。这种会议一般都会有赞助商。出钱多的金主很多时候会给一个Keynote的讲座。

2009年的金主是SAP。这多少有点让人大跌眼镜。一个做企业级软件的公司，来一个数据库顶级会议上大把撒钱，怎么看怎么怪。

在这次大会上，SAP董事会主席兼创始人之一的哈索·普拉特纳（Hasso Plattner）给了这样一个Keynote：A Common Database Approach for OLTP and OLAP Using an In-memory Column Database。这个Keynote宣告了SAP要搞一个内存数据库，它的名字叫HANA。

SAP要搞数据库，这可是一件大事情。一个做应用软件的要进军数据库市场，说明“兔子急了要咬人”了。但是企业级软件毕竟是应用软件，而数据库是基础架构软件。就像一个“做菜高手”突然说要开始“杀鸡”，先不说对方哪里来的底气，最起码外界对这个“做菜高手”的看法，肯定是见仁见智的。

HANA是High-Performance Analytic Appliance的简称。SAP要做的这个数据库，作为一个“做菜高手”进军“杀鸡市场”的第一炮，打得很响亮。按照SAP的宣传，它有着市面上传统的数据库很多不具备的特性。

下面我们可以一起了解一下这些特性，这很有必要。

**第一，HANA选择了按列存储的同时支持事务处理**。传统数据库是按行存储的，数据仓库近些年来才开始按照列式存储。按行存储对事务处理方便，但是不利于分析处理；按列存储则相反。但是这两者的不利于程度是有所不同的。

通常来说，一个数据库如果同时支持事务处理和分析处理，那么数据库厂商会选择按行存储，因为按列存储的同时支持高效率的事务处理是非常难的。但是HANA却选择了按列存储的同时还支持事务处理，这个用数据库界“老司机”的话来说就是，要么是艺高人胆大，要么是无知者无畏。

**第二，做出把所有的数据都放在内存里这个假设**。今天来看，内存不是很贵了，但是在2009年敢做出那样的假设胆子就不是一般的大了。一个数据库一旦数据都在内存里，很多传统数据库的基本假设就都不一样了，做法当然也就很不一样。

所以HANA在很多演示的时候，查询极快。一个在Oracle或者DB2上需要跑一天才能做出来的报表查询，在HANA那儿3秒钟搞定。对，就是这么快。当然，其实查询是精心挑选的，能够存储这么多数据的机器的配置是非常高的。

**第三，因为HANA选择了在一个系统同时支持事务处理和分析查询，这就让HANA的数据不需要额外ETL，企业也不需要为分析查询专门配备另外一份列存的数据**。某种程度上，HANA宣称自己节省了企业的消耗，也是对的。而且因为两者共享数据，分析查询的时候能够查询的数据就非常新了。这对企业来说也是非常有必要的。

**第四，HANA几乎完整地整合了R的功能，并且把SAP业务相关的很多功能直接在HANA内部实现了**。这有点反计算机软件构架里面的封装。然而在内存数据库的环境下让数据离业务相关计算更近，无疑是一种效率上极其有效的策略。

**第五，HANA采用了现代数据库里常用的Shared-nothing的体系架构**。这种体系架构数据被纵向按照某个主键切分，每台机器只需要负责自己的部分。这让HANA具备了非常灵活的资源配置，而且加了机器查询也就会变得更快，立竿见影。简而言之，HANA的体系架构很新。

综上所述，HANA在技术上是很有创新的，而且单纯从SAP公布出来的这些技术细节来看，HANA的确是具备了在很多方面对传统数据库发起挑战的能力。所以，一个“做菜”的，看起来“杀鸡”也杀得很漂亮。很多人不得不为SAP精彩的HANA数据库疯狂打Call了。

由于SAP的这个举措，首先受到伤害的是和SAP合作的IBM的DB2组了。毕竟，本来是难兄难弟抱团取暖，现在变成了一个人冲锋陷阵，抛弃了老伙伴。

其次受到威胁的当然是那个坐在数据库领域第一把交椅上的Oracle。试想一下，原来用SAP的必须上Oracle，而用Oracle的还可以搭自己家里的企业级软件。这让Oracle处于多有利的地位呀！但突然之间局势就变了，SAP有自己的数据库了，而且还很快、很厉害、很先进。接下来Oracle的这个生意就不好做了。

但是对2009年的SAP来说，HANA这个吸引眼球的宣传，一下子让原本已经成为或者即将成为二流公司的SAP回到了聚光灯前，不管产品有没有做出来，最起码先把风头抢占了。接下来，大家关注的就是SAP会做出一个什么样的产品来，是让大家刮目相看，还是烂泥扶不上墙呢？


