微软的SQL Server是整个数据库产业里面一个重要的产品。在2017年的时候,SQL Server超过了IBM的DB2成为仅次于Oracle的第二大数据库产品。

有关SQL Server的发展,一直有这样的一个传闻:微软从另外一个数据库厂商Sybase那儿买了一份源代码,然后微软就在这份源代码上改啊改。最后微软蒸蒸日上,Sybase却每况愈下。Sybase做了历史上最亏本的生意。

事实上真的是这样吗?当然不是。实际上微软SQL Server和Sybase之间的关系远比这个传闻复杂。今天我就来讲讲SQL Server的发展史。

1987年,微软和Sybase签署了合作伙伴协议。这个协议的主要内容是:微软和Sybase一起合作开发一款基于Sybase已经开发但还没发布的数据库产品。Sybase拥有这款产品在Unix相关平台上的发布权,而微软则拥有对OS/2以及任何微软开发的操作系统的发布权。

那个时候整个个人计算机平台上占统治地位的数据库叫dBase,是由Ashton-Tate公司开发的(这个公司后来倒闭了,关于它的故事在我们专栏的后面会讲)。当时为了能够让新开发的数据库系统可以吸引大量dBase的开发者,微软和Sybase决定跟Ashton-Tate合作,为SQL Server提供dBase的接口。

很不幸的是,1989年之于Ashton-Tate并不是个好年头。这一年它发布了dBase4。但是这个产品问题很多,Ashton-Tate从此陷入了泥潭,直到它被Borland收购。而微软和Sybase也跟Ashton-Tate结束了合作关系。但是微软和Sybase还是发布了SQL Server的1.0版,只是传说中的Ashton-Tate的接口被取消了。

这个1.0版的合作关系大致是这样的:Sybase负责开发所有的源代码,而微软负责测试,偶尔也打打酱油修点Bug。最初的时候,微软对整个源代码只有只读权限,并没有写的权限。可以说在这个合作关系里, Sybase主导了这整个项目的开发进展。

这种合作关系,到1992年才有所改变。因为Sybase忙于开发新版,微软拿到了Sybase 4.0的源代码,负责把这个代码移植到OS/2上。这个产品最后以SQL Server 4.2发布了。

OS/2这个操作系统是微软和IBM合作的,但是微软和IBM合作的时候心猿意马,于此同时微软自己在做Windows。而微软和Sybase之间的合作,以微软继续给老版本增加功能,而Sybase开发新的版本的方式展开。

随着时间的推移,对微软来说,Windows NT变得越来越重要。所以微软决定把在OS/2上的4.2版本,移植到Windows NT上。但是因为NT这个操作系统和OS/2很不一样,而微软内部对于如何移植4.2也有很不一样的观点。具体来说就是:到底是应该大量利用某个特定操作系统的特有的功能和特性,还是说数据库系统自己实现某些需要在操作系统层面来实现的功能?

无论是Sybase,还是现在数据库主流产品Oracle的做法,都是后者。因为它们都希望数据库可以运行在不同的操作系统上。所以,利用操作系统里面最基本的功能,其他的东西都在数据库内部实现是一个数据库厂商常用的策略。

但是微软的SQL Server组却决定偷个懒,让SQL Server充分利用Windows NT提供的新特性,这样一来,SQL Server的移植过程就简单很多。而且SQL Server在Windows NT上的运行效率也会高不少。但是同样的,SQL Server的代码也就变得不再是独立于操作系统的了,而是专门为Windows NT开发的。

因为这个本质观念上的不同,微软对于继续和Sybase合作的兴趣也变得小起来。1994年微软和Sybase“和平分手”了。分手之后,微软决定只在Windows NT上继续开发自己的SQL Server。而除了原来在Unix操作系统上独立发布数据库产品的权限外,Sybase也第一次可以自由在微软开发的任何操作系统上发布数据库产品。在当时看,这好像是个双赢的结局。

微软在接下来的18个月内,重写了大量的代码,并发布了SQL Server 6.0和6.5。这个时候,两个源代码看起来就很不一样了。

微软在数据库上开始大量投入,到处挖人。很多业界知名的人士,比如吉姆·格雷(Jim Gray)、菲尔·伯恩斯坦(Phil Bernstein)、大卫·坎贝尔(David Campbell)、彼得·斯皮罗(Peter Spiro)等后来大名鼎鼎的人物,都是在这个时候被微软挖进来的。

当时的微软可谓财大气粗,有些人被挖的时候,不愿意来西雅图,比尔·盖茨就专门为这些人在硅谷修个办公室。微软网罗了这些人才以后,有了充足的人才,就开始大刀阔斧地开始下一个版本的开发。

这个后来以SQL Server 7.0命名的版本,把整个数据库几乎每个模块,从存储引擎到数据处理引擎全部重写了。不但如此,微软觉得自己应该构建出完整的数据处理产品。SQL Server 7.0还增加了数据仓库的支持。这个支持来自于微软收购的一个以色列的创业公司Panorama。这个产品后来的查询语言叫做MDX,最后成为了数据仓库业界的标准语言。另外,7.0还增加了对ETL的支持。

SQL Server 7.0奠定了微软SQL Server的根基。

之后微软发布了SQL Server 2000,这个版本增加了在多台机器上部署SQL Server的能力,还增加了对数据挖掘和XML的支持。接下来,SQL Server 2005又增加了SQLCLR的支持。这个支持让C#和.NET成为SQL Server支持用户定义类型、用户定义函数等的基础,以及很多其他的新功能。

到这个时候,SQL Server已经把Sybase远远地甩在后面了。而微软的SQL部门可谓人才济济,无论是做学术的,还是做数据库开发的,微软都做了很多很有意思的尝试。Sybase却开始越来越举步维艰。

可微软后面的事情,却多少有点“大跃进”的味道了。比尔·盖茨提出了要构建新的文件系统WinFS。这个文件系统底层基于数据库,可以提供很先进的数据存储和查询能力。这个想法一出,业界一片哗然。微软投入了无数的人力、物力去做这个系统,最后却败得一塌糊涂。其实主要原因还是愿景超出了技术的能力,即使是微软也开发不出来。

很多人都觉得,微软之所以转向衰败,比尔·盖茨的WinFS需要负很大的责任。如果换成另外一个公司,浪费了如此多的人力、物力,能不能活下来就不知道了。更何况,微软还错过了很多其他比较好的机会。另外,SQL Server队伍里面大量人员卷入这个项目,对于SQL Server自身的发展也是一个束缚。

作为产品,SQL Server最近几年又活跃起来,只是和2000年前后的那种状态还是有所差别的,终究是不可同日而语的。而微软里面曾经在SQL Server核心工作的很多员工也早离开微软去了亚马逊、谷歌、Facebook等新兴公司。这让SQL Server的研发力量大打折扣。但是不管怎么样,比较SQL Server和Sybase的命运,SQL Server还是好太多了。