二
进行数据管理的主要工具是数据库。伴随着数据量的迅猛增长,传统的文件系统难以应对数据增长的挑战,也无法满足多用户共享数据和快速检索数据的需求。在这样的背景下,数据库的概念在20世纪60年代诞生了,先后出现了网状数据模型(Network Data Model)、层次数据模型(Hierarchical Data Model)和关系数据模型(Relational Data Model)等三种数据结构,每一种结构都体现了数据之间联系的不同表达方式。
网状数据库诞生于1964年,通用电气公司(GE)开发出了世界上第一个数据库系统——集成数据存储(Integrated Data Storage,IDS),采用网状数据结构,奠定了数据库发展的基础,在当时得到了广泛的应用,直到20世纪70年代末和80年代初,网状数据库都十分流行,在数据库系统产品中占据主导地位。
紧随网状数据库之后出现的是层次数据库,其数据模型是层次数据模型,即使用树结构来描述实体及其之间关系的数据模型。在这种结构中,每一个记录类型都用节点来表示,记录类型之间的联系则用节点之间的有向线段来表示。每一个子节点只能有一个父节点,但每一个父节点可以有多个子节点。这种结构决定了采用层次数据模型作为数据组织方式的层次数据库只能处理一对多的实体关系。典型的代表是IBM公司在1968年开发的信息管理系统(Information Management System,IMS),这是第一个大型商用的数据库系统。
虽然对于数据的集中存储、管理和共享的问题,网状数据库和层次数据库都给出了较好的解答,但在数据独立性和抽象级别上仍有很大缺陷。为了解决这些问题,关系数据库应运而生。1970年,IBM研究员埃德加·科德(Edgar Frank Codd)在《美国计算机学会会刊》(Communication of the ACM)杂志上发表了《大型共享数据库的关系数据模型》(“A Relational Model of Data for Large Shared Data Banks”)一文,首次提出了关系数据模型的概念,奠定了关系数据模型的理论基础,这篇论文的发表是数据库发展史上具有划时代意义的里程碑事件。随后,科德又陆续发表了多篇文章,论述了关系数据库的范式,用关系代数理论奠定了关系数据库的基础,为关系数据库建立了一个数据模型——关系数据模型。
关系数据模型的概念简单明了、结构特别灵活,具有坚实的数学理论基础,能满足所有布尔逻辑运算和集合运算规则形成的查询要求,还可以搜索、比较和组合不同类型的数据。此外,使用关系数据模型进行数据增加和删除等操作非常方便,且数据具有较高的独立性和更好的安全保密性,所以一经推出就受到了学术界和产业界的高度重视和积极响应,很快成为数据库市场的主流。直到今天,关系数据库仍然在数据库领域占据着重要的地位,应用范围十分广泛。
可惜的是,虽然关系数据库的思想诞生于IBM,而且这家公司1973年就启动了System R项目来研究关系型数据库的实际可行性,但IBM此前的层次数据库IMS发展得相当不错,所以在这个新发展方向上的投入有些犹豫不决,给后来者留下了巨大的空间。1977年6月,拉里·埃里森(Larry Ellison)、鲍勃·米纳(Bob Miner)和奥茨(Ed Oates)在硅谷共同创办了一家名为“软件开发实验室”(Software Development Laboratories,SDL)的公司,开始策划构建可以商用的关系型数据库管理系统。1979年,SDL干脆更名为关系软件有限公司(Relational Software,Inc.,RSI)。1983年,为了突出公司的核心产品,RSI再次更名为Oracle(Oracle Systems Corporation)——这就是大名鼎鼎的甲骨文公司。
如今的甲骨文公司,已经成为关系数据库的代名词,是仅次于微软的世界第二大软件公司,几乎世界上的所有行业都在使用甲骨文公司提供的数据库技术。我曾多次造访甲骨文公司位于加利福尼亚红木城(Redwood City)的总部办公区,优美的环境中坐落着6栋玻璃幕墙构成的圆柱形大厦,外形看起来就像数据库的标志。数据库外形的办公楼环绕在一个巨大的人工湖的周围,而这个湖里安静地停放着拉里·埃里森的那艘传奇大玩具——夺得2013年美洲杯冠军的帆船。
言归正传,网状数据模型、层次数据模型、关系数据模型基本上代表了20世纪人们存储和处理数据的主要方式。但在具体实践上,这三种方式均采用集中式的数据存储方式,也就是要求将所有的数据都存储在一个地方。这种集中式的方式虽然提高了数据调用的响应速度,但也会带来很多问题。打个比方,数据库相当于火车头,数据相当于车厢。传统做法遵循的逻辑是“火车跑得快,全靠车头带”,数据量越大挂接在后面的车厢就越多。总有一天,车厢就会多到火车头拉不动的程度,解决方法是进一步增加火车头的动力。但问题在于,当挂接车厢的速度远远快于火车头动力增长速度的时候,整个系统就瘫痪了。而且,因为车厢数量的增多,整列火车的灵活性会大幅度下降。更要命的是,一旦火车头出现故障,整列火车就无法运行了。针对这种情况,现实的出路是让每节车厢都具备动力系统,这样一来,自带动力系统的车厢就可以灵活组合,而且不会产生车厢数量增多就动力枯竭的情况。即便某节车厢出现故障,也不影响其他车厢的运行。这种思想,就是分布式数据库的理念。
进入大数据和移动互联时代之后,因为数据的特性和应用场景的变化,注定所有数据库都要朝着分布式的方向发展。但是分布式数据库也有一些问题,最突出的就是在节点之间进行数据通信会花费大量时间。此外,数据存取效率、数据的安全性和保密性等方面在众多节点之间也会受到威胁。一种解决方案是搭建“云数据库”,也就是将数据库部署和虚拟化在云计算环境下,通过计算机网络提供数据管理服务。云数据库可以共享基础架构,从而大大增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,用户只需要通过付费的方式就能获取数据库服务。不同于传统数据库,云数据库通过计算存储分离、存储在线扩容、计算弹性伸缩来提升数据库的可用性和可靠性。
以数据库系统为代表的信息系统的建立和运行,使人类从繁杂的重复性数据劳动中解放出来,大大提高了商业效率。但这些信息系统都是针对特定的业务过程、处理离散事务的运营式系统。数据在其中的作用,是连接贯穿一个个商务流程的记录,数据不断累积的结果仅仅限于查询,而不是分析。怎样从商务流程的数据记录中提取对决策过程有参考价值的信息,从而服务于更好的商务决策呢?这个需求,在数据库发展的同时变得更加迫切。