数据库可以按照存储模型、关系型/非关系型来进行分类,其分类如图所示。
数据库的总体分类图
1.网状数据库、层次数据库 数据库若按照使用的数据存储模型来划分,则可以把数据库分为网状数据库(Network Database)、关系型数据库(Relational Database)和层次数据库(Hierarchical Database)。其中,商业中使用最广泛的数据库主要是关系型数据库,例如,Oracle、MySQL、DB2、SQL Server等。
网状数据库(Network Database)是指处理以记录类型为节点的网状数据模型的数据库,处理方法是将网状结构分解成若干棵二级树结构,称为系,其代表是DBTG(DataBase Task Group,数据库任务组)系统。系类型是两个或两个以上的记录类型之间联系的一种描述。在一个系类型中,有一个记录类型处于主导地位,称为系主记录类型,其他称为成员记录类型。系主和成员之间的联系是一对多的关系。1969年美国的CODASYL组织提出了一份“DBTG报告”,以后,根据DBTG报告实现的系统一般称为DBTG系统。现有的网状数据库系统大都是采用DBTG方案。DBTG系统是典型的三级结构体系:子模式、模式、存储模式。相应的数据定义语言分别称为子模式定义语言SSDDL(SubSchema Data Definition Language),模式定义语言SDDL(Schema Data Definition Language),设备介质控制语言DMCL(Device Medium Control Language),另外,还有数据操纵语言DML(Data Manipulation Language)。
层次数据库(Hierarchical Database)也称为树状数据库,它是将数据组织成有向有序的树结构,并用“一对多”的关系联结不同层次的数据库。最著名最典型的层次数据库是IBM公司的IMS(Information Management System)数据库。IMS是IBM公司研制的最早的大型数据库管理系统,其数据库模式是多个物理数据库记录型(PDBR,Physical Data Base Record)的集合。每个PDBR对应层次数据模型的一个层次模式。各个用户所需数据的逻辑结构称为外模式,每个外模式是一组逻辑数据库记录型(LDBR,Logical Data Base Record)的集合。LDBR是应用程序所需的局部逻辑结构。
2.关系型数据库 RDBMS(Relational Database Management System,关系型数据库管理系统)是E.F. Codd博士在其发表的论文《大规模共享数据银行的关系型模型》(Communications of the ACM杂志1970年6月刊)基础上设计出来的。关系型数据库是将数据组织为相关的行和列的系统,而管理关系型数据库的计算机软件就是RDBMS。它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。自关系型数据库管理系统被提出以来,RDBMS获得了长足的发展,许多企业的在线交易处理系统、内部财务系统、客户管理系统等采用了RDBMS。
关系型数据库,顾名思义是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。结构化查询语言(Structured Query Language,简称SQL)就是一种基于关系型数据库的语言,这种语言执行对关系型数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。截至2017年,业界普遍使用的关系型数据库管理系统产品有Oracle、MySQL、DB2以及SQL Server等。若按照大小来分类的话,则关系型数据库可以简单分为如下几类:①小型数据库:Access、foxbase。②中型数据库:MySQL、SQL Server、Informix。③大型数据库:Oracle、DB2。
RDBMS的特点如下:①数据以表格的形式出现。②每一行存储着一条单独的记录。③每个列作为一条记录的一个属性而存在。④许多的行和列组成一张表。⑤若干的表组成数据库。
3.内存数据库 内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能,典型的内存数据库有SQLite和TimesTen。SAP公司专门开发了一款大型的内存数据库HANA,并且在逐步占领市场,而传统的数据库巨头Oracle公司开发的TimesTen也是一款内存数据库。可以预见,内存数据库将会是未来的一个发展趋势。
4.Oracle、MySQL、SQL Server Oracle数据库,又名Oracle RDBMS,或简称Oracle,是甲骨文公司的一款关系型数据库管理系统。它是一款一直处于领先地位的数据库领域产品。可以说Oracle数据库系统是目前世界上流行的关系型数据库管理系统,系统可移植性好、使用方便、功能强大,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好、适应高吞吐量的数据库解决方案。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在Web应用方面,MySQL是最好的RDBMS(Relational Database Management System,关系型数据库管理系统)应用软件之一,广泛地应用于互联网行业。
SQL Server(Microsoft SQL Server,MS Server)是由Microsoft开发和推广的关系型数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。SQL Server是一个全面的数据库平台,使用集成的商业智能(Business Intelligence,简称BI)工具提供了企业级的数据管理。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL Server近年来不断更新版本,目前最新的版本是SQL Server 2016,并且微软正在研发基于Linux版本的SQL Server,可见SQL Server在关系型数据库中也占有一席之地。
常见的关系型数据库的特点见表1。
5.非关系型数据库 NoSQL(Not Only SQL)泛指非关系型的数据库,即“不仅仅是SQL”。随着Web2.0的兴起,传统的关系型数据库在应付Web2.0网站,特别是超大规模和高并发的SNS(Social Network Site,社交网)类型的Web2.0纯动态网站时已经显得力不从心,暴露了很多难以克服的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL数据库大约有四大分类:键值(Key-Value)数据库、列存储数据库、文档型数据库和图形(Graph)数据库。
1)对于键值(Key-Value)数据库,主要会使用到一个哈希表,这个表中有一个特定的键和一个指向特定数据的指针。Key-Value模型对于信息系统来说,其优势在于简单、易部署,但是如果只对部分值进行查询或更新,那么键值数据库就显得效率低下了。常见的键值数据库有:Redis、LevelDB、RocksDB、Riak KV、Oracle Berkeley DB、Hazelcast、Ehcache、Memcached等。
2)对于列存储数据库,通常是用来应对分布式存储的海量数据,键仍然存在,但是它们的特点是键指向了多个列。常见的列存储数据库有:HBase、Cassandra、Accumulo、HyperTable等。
3)对于文档型数据库,其灵感来自于Lotus Notes办公软件,而且它与第一种键值存储类似。这种类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,例如JSON。文档型数据库可以看作是键值数据库的升级版,允许它们之间嵌套键值,而且文档型数据库比键值数据库的查询效率更高。常见的文档型数据库有:CouchDB、MongoDB等。国内也有文档型数据库SequoiaDB,该数据库已经开源。
如果说Oracle是关系型数据库的王者,那么MongoDB可以说是非关系型数据库的霸主。MongoDB是一个基于分布式文件存储的数据库,它由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。它支持的数据结构非常松散,因此,可以存储比较复杂的数据类型。MongoDB最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
4)对于图形(Graph)数据库,它与其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多台服务器上。NoSQL数据库没有标准的查询语言(SQL),因此,进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。常见的图形数据库有:Neo4j、InfoGrid、InfiniteGraph、Titan、Giraph等。
常见的非关系型数据库的优缺点及其应用场景见表2。
表3总结了MongoDB、Riak KV,Hypertable和HBase这四个产品的主要特性。
6.行存储和列存储 将表放入存储系统中的方法有两种:行存储和列存储,绝大部分数据库是采用行存储的。行存储法是将各行放入连续的物理位置,这很像传统的记录和文件系统,然后由数据库引擎根据每个查询提取需要的列。列存储法是将数据按照列存储到数据库中,与行存储类似。具体而言,行存储和列存储的区别见表4。