任务9.2 常用数据库
9.2.1 学习要点
学习要点如下。
♦ 数据库分类。
♦ 常用关系型数据库。
♦ 常用非关系型数据库。
♦ 关系型数据库优势与不足。
♦ 非关系型数据库优势与不足。
9.2.2 知识准备
9.2.2.1 常用数据库概述
数据库通常分为层次式数据库、网状数据库和关系型数据库,不同的数据库基于不同的数据结构来联系和组织数据,在当今互联网中最常见的数据库模型主要是关系型数据库和非关系型数据库。
根据2020年1月DB-Engines数据库排名,截止2020年1月该网站实时统计了350种数据库的排名指数。其来源于Google、Bing和Yandex搜索引擎,以及Stack Overflow、DBA Stack Exchange、LinkedIn、Twitter等知名开发者社区和职场社交网络,排名前20的数据库如图9-23所示。
图9-23 排名前20的数据库
9.2.2.2 常用关系型数据库产品
虽然网状数据库和层次式数据库已经很好地解决了数据的集中存储和共享问题,但是在数据库独立性和抽象级别上仍有很大不足。用户在存取这两种数据库时仍然需要明确数据的存储结构并指出存取路径,而关系型数据库可以较好地解决这些问题。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(二维表格形式),其中对数据的操作几乎全部建立在一个或多个关系表格中,通过对这些相互关联的表格进行分类、合并、连接或选取等运算来实现数据库的管理。
关系型数据库已诞生40多年,有许多成熟的产品,如Oracle和MySQL。Oracle在数据库领域上升到霸主地位,形成每年高达数百亿美元的庞大市场。2020年1月DB-Engines统计的排名前10的关系型数据库如图9-24所示。
图9-24 排名前10的关系型数据库
(1)Oracle数据库。
Oracle数据库系统是美国ORACLE(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server)或B/S体系结构的数据库之一,如SilverStream就是基于数据库的一种中间件。Oracle数据库是目前世界上使用较为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为一个分布式数据库,它实现了分布式处理功能。
Oracle数据库最新版本为Oracle Database 19c。从12c版本开始,Oracle便引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云;此外,一些创新特性可最大限度地提高资源使用率和灵活性。例如,Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle 12c版成为私有云和公有云部署的理想平台。
(2)MySQL数据库。
MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言,即结构化查询语言(Structured Query Language,SQL)进行数据库管理。
MySQL是开放源代码,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其良好的速度、可靠性和适应性而备受关注,大多数人都认为在不需要事务化处理的情况下MySQL是管理数据最好的选择。
(3)SQL Server数据库。
SQL Server是由微软公司开发的数据库管理系统,是Web上流行的用于存储数据的数据库,已广泛用于电子商务、银行、保险、电力等行业。目前最新版本是SQL Server 2020,它在Windows上运行性能很稳定。但是该数据库的并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。SQL Server提供了众多的Web和电子商务功能,如对XML和Internet标准的丰富支持。通过Web对数据进行轻松安全的访问,具有强大、灵活、基于Web和安全的应用程序管理等。而且由于其易操作性及友好的操作界面,所以深受广大用户的喜爱。
(4)Sybase数据库。
Sybase公司成立于1984年,名称“Sybase”取自“system”和“database”。其创始人之一Bob Epstein是Ingres大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第1个关系数据库产品是1987年5月推出的Sybase SQL Server 1.0。Sybase首先提出Client/Server数据库体系结构的思想,并率先在Sybase SQL Server中实现。
选择数据库的首要原则是根据实际需要,并且考虑软件开发费用。MySQL是一个免费的数据库系统,并具备了标准数据库的功能,建议选用。
9.2.2.3 非关系型数据库
非关系型数据库存储数据不需要固定的表结构,也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势,其类型如下。
(1)键值(Key/Value)数据库。
键值数据库类似传统语言中使用的哈希表,可以通过key来添加、查询或删除数据库。因为使用key主键访问,所以会获得很高的性能及扩展性。
键值数据库主要使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/Value模型对于IT系统的优势在于简单、易部署、高并发,常用的键值数据库有Memcached、Redis、MemcacheDB。2020年1月DB-Engines统计的排名前10的键值数据库如图9-25所示。
图9-25 排名前10的键值数据库
(2)列存储(Column-oriented)数据库。
列存储数据库将数据存储在列簇中,一个列簇存储经常被一起查询的相关数据。例如,我们经常会查询某个人的姓名和年龄,而不是薪资。这种情况下姓名和年龄会被放到一个列簇中,薪资会被放到另一个列簇中。这种数据库通常用来应对分布式存储海量数据,常用的是Cassandra、HBase。
(3)面向文档(Document-Oriented)数据库。
面向文档数据库的灵感来自于Lotus Notes办公软件,其数据模型是版本化的文档。半结构化文档以特定的格式存储,如JSON。面向文档数据库可以看作是键值数据库的升级版,允许之间嵌套键值,而且比键值数据库的查询效率更高。
面向文档数据库会将数据以文档形式存储,每个文档都是自包含的数据单元,以及一系列数据项的集合。每个数据项都有一个名词与对应值,值既可以是简单的数据类型,如字符串、数字和日期等。也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或JSONB等多种形式存储。常用的面向文档数据库有MongoDB、CouchDB。2020年1月DB-Engines统计的排名前10的面向文档数据库如图9-26所示。
图9-26 排名前10的面向文档数据库
(4)图形数据库。
图形数据库允许以图的方式存储数据,实体会作为顶点,而实体之间的关系则会作为边。如有Steve Jobs、Apple和Next共3个实体,则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs。常用的图形数据库有Neo4J、InforGrid,2020年1月DB-Engines统计的排名前10的图形数据库如图9-27所示。
图9-27 排名前10的图形数据库
(5)时序数据库。
2017年2月Facebook开源了beringei时序数据库,4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了。而早在2016年7月百度云在其天工物联网平台上发布了国内首个多租户的分布式时序数据库产品TSDB,成为支持其发展制造、交通、能源、智慧城市等产业领域的核心产品,也成为百度战略发展产业物联网的标志性事件。时序数据库作为物联网方向一个非常重要的服务,业界的频频发声正说明各家企业已经迫不及待地拥抱物联网时代的到来。
时序数据是基于时间的一系列的数据,在有时间的坐标中将这些数据点连成线。向过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;向未来看可以做大数据分析、机器学习,实现预测和预警。
时序数据库是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。
对比传统数据库仅仅记录数据的当前值,时序数据库则记录所有的历史数据,并且时序数据的查询也总是会带上时间作为过滤条件。常用的时序数据库有InfluxDB,2020年1月DB-Engines统计的排名前10的时序数据库如图9-28所示。
图9-28 排名前10的时序数据库
(6)搜索引擎数据库。
搜索引擎数据库最近比较受欢迎的包括Solr和Elasticsearch等,Solr是Apache的一个开源项目,基于业界大名鼎鼎的Java开源搜索引擎Lucene。在过去的10年里Solr发展壮大,拥有广泛的用户群体,它提供分布式索引、分片、副本集、负载均衡,以及自动故障转移和恢复功能。如果正确部署且良好管理,Solr就能够成为一个高可靠、可扩展和高容错的搜索引擎;Elasticsearch构建在Apache Lucene库之上,也是开源搜索引擎。通过REST和schema-free的JSON文档提供分布式、多租户全文搜索引擎,并且官方提供Java、Groovy、PHP、Ruby、Perl、Python、.NET和JavaScript客户端。目前Elasticsearch与Logstash和Kibana配合部署成日志采集和分析,简称“ELK”,它们都是开源软件。最近新增了一个FileBeat,这是一个轻量级的日志收集处理工具(Agent)。其占用资源少,适合于在各个服务器中搜集日志后传输给Logstash。
9.2.2.4 关系型数据库和非关系型数据库的比较
1. 关系型数据库
关系型数据库指采用了关系模型来组织数据的数据库,一个关系型数据库是由二维表及其之间的联系所组成的一个数据组织。
关系型数据库的最大特点就是事务的一致性,传统的关系型数据库读/写操作都是事务处理型的,具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)等特点。这些特点使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统,其优势如下。
(1)容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。
(2)使用方便:通用的SQL语言使得操作关系型数据库非常方便。
(3)易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率。
关系型数据库的不足如下。
(1)数据读/写必须经过SQL解析,大数据和高并发下读写性能不足。对于传统关系型数据库来说,硬盘的频繁访问是一个很大的瓶颈。
(2)具有固定的表结构,因此扩展困难。
(3)多表的关联查询导致性能欠佳。
2. 非关系型数据库
非关系型数据库不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势,其特点如下。
(1)非结构化存储。
(2)基于多维关系模型。
(3)具备特有的使用场景。
非关系型数据库的优势如下。
(1)高并发和大数据下读/写能力较强(基于键值对,可以想象成表中的主键和值的对应关系。而且不需要经过SQL层的解析,所以性能非常高)。
(2)基本支持分布式,易于扩展,可伸缩(因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展)。
(3)简单,弱结构化存储。
非关系型数据库的不足如下。
(1)事务处理支持较弱。
(2)通用性差。
(3)无完整性约束,复杂业务场景支持较差。