数据库泛谈

Breeze Shane大约 20 分钟DatabaseDatabase

数据库,又称为数据管理系统,是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

分类

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。

关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

关系型数据库特点
  1. 存储方式:传统的关系型数据库采用表格的储存方式,数据以行和列的方式进行存储,要读取和查询都十分方便。
  2. 存储结构:关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。
  3. 存储规范:关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。
  4. 扩展方式:由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。
  5. 查询方式:关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。
  6. 规范化:在数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。
  7. 事务性:关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性,对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以马上回滚事务。
  8. 读写性能:关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。
  9. 授权方式:关系型数据库常见的有Oracle,SQLServer,DB2,Mysql,除了Mysql大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用,即使是免费的Mysql性能也受到了诸多的限制。

非关系型数据库(NoSQL数据库)

  1. 文档数据库——这些数据库通常将每个键与称为文档的复杂数据结构配对。文档可以包含键数组对、键值对甚至嵌套文档。

    示例:MongoDB、Apache CouchDB、ArangoDB、Couchbase、Cosmos DB、IBM Domino、MarkLogic、OrientDB。

  2. 键值存储——每个单独的项都存储为键值对。键值存储是所有NoSQL数据库中最简单的数据库。

    示例:Redis,Memcached,Apache Ignite,Riak。

  3. 宽列存储——这些类型的数据库针对大型数据集上的查询进行了优化,它们将数据列存储在一起,而不是行。

    示例:Cassandra,Hbase,Scylla。

  4. 图形存储——这些存储关于图形、网络的信息,例如社会关系、路线图、交通链接。

    示例:Neo4j,AllegroGraph。

非关系型数据库特点

对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

  1. 易扩展:NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。
  2. 大数据量,高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。
  3. 灵活的数据模型:NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。
  4. 高可用:NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

提示

非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。

关系型与非关系型数据库的比较

  1. 成本:Nosql数据库很容易部署,基本上是开源软件,无需像Oracle那样花费大量成本购买,比关系数据库便宜。
  2. 查询速度:Nosql数据库将数据存储在高速缓存中,不需要对SQL层进行分析。关系数据库在硬盘上存储数据,自然的查询速度远比Nosql数据库慢。
  3. 存储数据的格式:Nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
  4. 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。Nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  5. 持久存储:Nosql不使用于持久存储,海量数据的持久存储,还是需要关系型数据库
  6. 数据一致性:非关系数据库通常强调数据的最终一致性,而不是像关系数据库那样强烈的数据一致性,以及从非关系数据库读取的数据可能仍处于中间状态,Nosql不提供对事务的处理。

特点

  1. 数据结构化数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。
  2. 数据的共享性高,冗余度低,易扩充数据库的数据不再面向某个应用而是面向整个系统,因此可以被多个用户、多个应用、用多种不同的语言共享使用。由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据库系统易于扩充,我们称之为弹性大。
  3. 数据独立性高数据独立性包括数据的物理独立性和数据的逻辑独立性。数据库管理系统的模式结构和二级映像功能保证了数据库中的数据具有很高的物理独立性和逻辑独立性。
  4. 数据由DBMS统一管理和控制数据库的共享是并发的共享,即多个用户可以同时存取数据库中的数据甚至可以同时存取数据库中同一个数据。为此,DBMS必须提供统一的数据控制功能,包括数据的安全性保护,数据的完整性检查,并发控制和数据库恢复。

作用

  1. 实现数据共享:数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
  2. 减少数据的冗余度:同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。

注意

任何一种性能优良的数据库系统都是不可能避免数据冗余的,因为冗余的数据也是日后进行数据库恢复的技术手段之一。

数据抽象

数据抽象主要是为了向用户屏蔽复杂性。一共分为三层:

  1. 物理层,物理层的数据抽象主要描述了数据在物理层面是怎么存储的数据,主要是数据库的供应商来研究。
  2. 逻辑层,逻辑层的数据抽象主要描述了数据库中存储着什么数据,这些数据之间有什么关系,这主要是开发人员或者是数据库管理员考虑的,逻辑层的用户不需要去知道我的数据具体是怎么样子存储的。
  3. 视图层,在一些数据库系统中,往往数据库是非常庞大的,而我们用户只关心庞大的数据库中的某一个小部分,视图层描述着庞大的数据库中的一部分,作为一个视图,由于大型数据库中的数据非常多而且具有着多样性,这就不可避免的产生了复杂性,视图层的抽象的定义正是为了给只需要访问一部分数据库的用户提供与系统的交互的简单性。

视图

数据库为用户在视图层提供一个个的视图,可以隐藏数据库的复杂性,因为如果用户只需要某一部分的数据,那么只需要把那部分拿出来单独作为一个视图提供给用户就好了,用户不用关心这一部分数据与数据库系统中其他数据的关系,而且视图还可以起到不让用户访问某一些数据的作用,可以对数据库的安全性有所保障。

实例和模式

实例:数据库会随着时间的推移而发生数据的更改或者是结构的更改,在某一时刻数据库中所有数据的集合。

提示

数据库实例状态是数据库实例的运行情况。

模式:数据库的总体设计被称为模式,是数据库中全体数据的结构以及特征的描述,是所有用户的公共视图。

数据库的三级模式结构

  1. 外模式(反映了数据库系统的用户观)

    外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。

  2. 概念模式(反映了数据库系统的整体观)

    概念模式又称模式或逻辑模式,对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。

  3. 内模式(反映了数据库系统的存储观)

    内模式又称存储模式,对应于物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。

数据库的两级映射

数据库系统在三级模式之间提供了两级映像:模式/内模式的映像、外模式/模式的映像。

  • 模式/内模式的映像:实现概念模式到内模式之间的相互转换。
  • 外模式/模式的映像:实现外模式到概念模式之间的相互转换。

提示

数据的独立性是指数据与程序独立,将数据的定义从程序中分离出来,由DBMS(数据库管理系统)负责数据的存储,从而简化应用程序,大大减少应用程序编制的工作量。

数据的独立性是由DBMS的二级映像功能来保证的。数据的独立性包括数据的物理独立性和数据的逻辑独立性。

数据的物理独立性和逻辑独立性

数据的物理独立性是指当数据库的内模式发生改变时,数据的的逻辑结构不变。由于应用程序处理的只是数据的逻辑结构,这样物理独立性可以保证,当数据的物理结构改变了,应用程序不用改变。但是,为了保证应用程序能够正确执行,需要修改概念模式/内模式之间的映像。

数据的逻辑独立性是指用户的应用程序与数据库结构是相互独立的。数据的逻辑结构发生变化后,用户程序也可以不修改。但是,为了保证应用程序能够正确执行,需要修改外模式/概念模式之间的映像。

数据模型

数据模型是对现实世界数据特征的抽象。数据模型是用来描述数据、组织数据和对数据进行操作的。

分类

  1. 概念模型:是按用户的观点来对数据和信息建模,主要用于数据库设计,也称信息模型,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。
  2. 逻辑模型:主要包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型等。它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
  3. 物理模型:描述数据在系统内部的表示方式和存取方式,或在磁盘上的存储方式和存取方法。物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节。

数据模型的三要素

  1. 数据结构:是所研究的对象类型的集合,是对系统的静态特性的描述。
  2. 数据操作:是指对数据库中各种对象(型)的实例(值)允许进行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。
  3. 数据的完整性约束:是完整性规则的集合,完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。

数据库系统的核心——数据管理系统

数据库管理系统(Database Management System,DBMS)是一个能够科学地组织和存储数据,高效地获取和维护数据的系统软件,是位于用户与操作系统之间的数据管理软件。

主要功能

  1. 数据定义功能:数据库管理系统提供数据定义语言(DDL),用户可以通过它可以方便地对数据库中的数据对象的组成与结构进行定义;
  2. 数据组织、存储和管理功能:数据库管理系统要分类组织、存储和管理数据,包括数据字典,用户数据、数据的存取路径等。要确定以何种文件结构和存取方式在存储上组织这些数据,如何实现数据之间的联系;数据组织和存储的基本目标是提高存储空间利用率和方便存取,提供多种存取方法来提高存取效率;
  3. 数据操纵功能:数据库系统管理系统还提供数据操纵语言(Data Manipulation Language,DML),用户可以使用它来操纵数据,实现对数据库的基本操作,如查询、插入、删除和修改等;
  4. 数据库的事务管理和运行管理:数据库在建立、运用和维护时由数据库管理系统统一管理和控制,以保证事务的正确运行,保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复;
  5. 数据库的建立和维护功能:包括数据库初始数据的输入和转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等,这些功能通常由一些使用程序或管理工具完成的。
  6. 数据库的传输功能:DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。
  7. 与其他软件系统的通信功能
关系数据库管理系统的完整性控制机制应具有哪三方面的功能?
  1. 定义功能,即提供定义完整性约束条件的机制;
  2. 检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;
  3. 违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

数据库系统组成

  1. 数据库:是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。

  2. 硬件:构成计算机系统的各种物理设备,包括存储所需的外部设备。硬件的配置应满足整个数据库系统的需要。

  3. 软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统(Database Management System,DBMS)是数据库系统的核心软件,是在操作系统的支持下工作,解决如何科学地组织和存储数据,如何高效获取和维护数据的系统软件。其主要功能包括:数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护。

  4. 人员:主要有4类。

    第一类为系统分析员和数据库设计人员:系统分析员负责应用系统的需求分析和规范说明,他们和用户及数据库管理员一起确定系统的硬件配置,并参与数据库系统的概要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。

    第二类为应用程序员,负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改。

    第三类为最终用户,他们利用系统的接口或查询语言访问数据库。

    第四类用户是数据库管理员(data base administrator,DBA),负责数据库的总体信息控制。

提示

数据库管理员(Database Administrator,DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

DBA的具体职责包括:具体数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。

DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。

数据库管理员一般是由业务水平较高、资历较深的人员担任。