微软的 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 还是好太多了。