0%

数据库

数据库

数据库就是一个存储数据的仓库,它将数据按照特定的规律存储在磁盘上。为了方便用户组织和管理数据,其专门提供了数据库管理系统。

发展三个阶段

数据库管理系统(DBMS)是数据库的核心软件之一,是位于用户与操作系统之间的数据管理软件,用于建立,使用和维护数据库。

数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。

人工管理阶段

在计算机出现之前,人们主要利用纸张和计算工具(如算盘和计算尺)来进行数据的记录和计算,依靠大脑来管理和利用数据。

到了 20 世纪 50 年代中期, 这时计算机刚刚开始萌芽,还没有类似于磁盘等专门管理数据的存储设备,只有纸带、卡片、磁带等外存。所以计算机只能局限于科学技术方面,主要用于科学计算。

人工管理阶段的特点如下:

  • 数据不能长期保存
  • 不便于查询数据
  • 数据不能共享,冗余度大
  • 数据不具有独立性

文件系统阶段

在 20 世纪 50 年代后期到 20 世纪 60 年代中期,计算机中的磁盘和磁鼓等直接存取设备开始普及。这时,可以将数据存储在计算机的磁盘上。这些数据都以文件的形式存储,然后通过文件系统来管理这些文件。

文件系统阶段的特点如下:

  • 数据可以长期保存
  • 数据由文件系统来管理
  • 数据冗余大,共享性差
  • 数据独立性差
  • 无法应对突发事故(文件误删,磁盘故障等)

数据库系统阶段

在 20 世纪 60 年代后期,随着网络技术的发展,计算机软/硬件的进步,出现了数据库技术,该阶段就是所谓的数据库系统阶段。

数据库系统阶段使用专门的数据库来管理数据,用户可以在数据库系统中建立数据库,然后在数据库中建立表,最后将数据存储在这些表中。用户可以直接通过数据库管理系统来查询表中的数据。

相对于文件系统来说,数据库系统实现了数据结构化。在文件系统中,独立文件内部的数据一般是有结构的,但文件之间不存在联系,因此整体来说是没有结构的。 数据库系统虽然也常常分成许多单独的数据文件,但是它更注意同一数据库中各数据文件之间的相互联系。

数据库系统阶段的特点如下:

  • 数据由数据库管理系统统一管理和控制
  • 数据共享性高,冗余度低
  • 数据独立性强
  • 数据粒度小

数据粒度是数据库中数据的细化程度。细化程度越高,粒度越小;细化程度越低,粒度越大。

数据管理的3个阶段 人工管理(20 世纪 50 年代中期) 文件系统(50 年代末至 60 年代中期) 数据库系统(60 年代后期)
应用背景 科学计算 科学计算、管理 大规模数据、分布数据的管理
硬件背景 无直接存取存储设备 磁带、磁盘、磁鼓 大容量磁盘、可擦写光盘、按需增容磁带机等
软件背景 无专门管理的软件 利用操作系统的文件系统 由 DBMS 支撑
数据处理方式 批处理 联机实时处理、批处理 联机实时处理、批处理、分布处理
数据的管理者 用户/程序管理 文件系统代理 DBMS 管理
数据应用及其扩充 面向某一应用程序难以扩充 面向某一应用系统、不易扩充 面向多种应用系统、容易扩充
数据的共享性 无共享、冗余度极大 共享性差、冗余度大 共享性好、冗余度小
数据的独立性 数据的独立性差 物理独立性好、逻辑独立性差 具有高度的物理独立性、具有较好的逻辑独立性
数据的结构化 数据无结构 记录内有结构、整体无结构 统一数据模型、整体结构化
数据的安全性 应用程序保护 文件系统保护 由 DBMS 提供完善的安全保护

数据库是什么?

数据描述事物的符号称为。数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语言等。在数据库中数据表示记录,例如,在学生管理数据库中,记录学生的信息包括学号、姓名、性别、年龄、籍贯和联系电话等,这些信息就是数据。

数据库(Database)指长期存储在计算机内的、有组织的、可共享的数据集合。

数据库管理系统(DBMS)是数据库系统的核心软件之一,是位于用户与操作系统之间的数据管理软件,用于建立,使用和维护数据库。它的主要功能包括数据定义、数据操作、数据库的运行管理、数据库的建立和维护等几个方面。

关系型数据库和非关系型数据库

关系型数据库

关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单说,关系型数据库是由多张能互相连接的表组成的数据库。

优点

  1. 都是使用表结构,格式一致,易于维护。
  2. 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
  3. 数据存储在磁盘中,安全。

缺点

  1. 读写性能比较差,不能满足海量数据的高效率读写。
  2. 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
  3. 固定的表结构,灵活度较低。

常见的关系型数据库有 Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access 和 MySQL 等。

非关系型数据库

非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。

优点

  1. 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  2. 速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
  3. 海量数据的维护和处理非常轻松。
  4. 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
  5. 可以实现数据的分布式处理。

缺点

  1. 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
  2. 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
  3. 功能没有关系型数据库完善。

常见的非关系型数据库有 Neo4j、MongoDBRedis、Memcached、MemcacheDB 和 HBase

数据库系统和组成

数据库系统(Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。

数据库:用于存储数据的地方。

数据库(DataBase,DB)提供了一个存储空间来存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。

数据库管理系统:用于管理数据库的软件。

数据库管理系统(Database Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户和操作系统之间,对数据库进行统一管理。DBMS 能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。

数据定义功能

DBMS 提供数据定义语言(Data Definition Language,DDL),用户通过它可以方便地对数据库中的数据对象进行定义。

数据操纵功能

DBMS 还提供数据操纵语言(Data Manipulation Language,DML),用户可以使用 DML 操作数据,实现对数据库的基本操作,如查询、插入、删除和修改等。

数据库的运行管理

数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。例如:

  • 数据的完整性检查功能保证用户输入的数据应满足相应的约束条件;
  • 数据库的安全保护功能保证只有赋予权限的用户才能访问数据库中的数据;
  • 数据库的并发控制功能使多个用户可以在同一时刻并发地访问数据库的数据;
  • 数据库系统的故障恢复功能使数据库运行出现故障时可以进行数据库恢复,以保证数据库可靠地运行。

提供方便、有效地存取数据库信息的接口和工具

编程人员可通过编程语言与数据库之间的接口进行数据库应用程序的开发。数据库管理员(Database Administrator,DBA)可通过提供的工具对数据库进行管理。

数据库的建立和维护功能

数据库功能包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监控、分析功能等。这些功能通常由一些使用程序来完成。

数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库库的软件补充。

数据库应用程序(DataBase Application)的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与 DBMS 进行通信、访问和管理 DBMS 中存储的数据,允许用户插入、修改、删除数据库中的数据。

访问接口

ODBC

ODBC(Open Database Connectivity,开放数据库互连)为访问不同的 SQL 数据库提供了一个共同的接口。ODBC 使用 SQL 作为访问数据的标准。这一接口提供了最大限度的互操作性。一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统。

JDBC

Java Data Base(JDBC,Java 数据库连接)用于 Java 应用程序连接数据库的标准方法,是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。

ADO.NET

ADO.NET 是微软在 .NET 框架下开发设计的一组用于和数据源进行交互的面向对象类库。ADO.NET 提供了对关系数据、XML 和应用程序的访问,允许和不同类型的数据源以及数据库进行交互。

PDO

PDO(PHP Data Object)为 PHP 访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO 是 PHP 5 新加入的一个重大功能。

数据库种类

层次数据库(Hierarchical Database,HDB)

层次数据库是最早研制成功的数据库系统,它把数据通过层次结构(树形结构)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和普及,现在已经很少使用了。

比较具有代表性的层次数据库是 IMS(Information Management System)数据库,由 IBM 公司研制成功。

关系型数据库(Relational Database,RDB)

关系型数据库是现在应用最广泛的数据库。关系型数据库在 1969 年诞生,可谓历史悠久。和 Excel 工作表一样,关系型数据库也采用由行和列组成的二维表来管理数据,所以简单易懂。同时,它还使用 SQL(Structured Query Language,结构化查询语言)对数据进行操作。

比较具有代表性的关系型数据库有 Oracle Database、SQL Server、DB2、PostgreSQL 和MySQL

面向文档(Document-Oriented)数据库

面向文档数据库会将数据以文档的形式存储。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。

数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。

具有代表性的面向文档数据库有 MongDB 和 CouchDB。

列存储(Column-oriented)数据库

列存储数据库将数据存储存在列族(column family)中,一个列族用来存储经常被一起查询的相关数据。例如,如果有一个 Person 类,我们经常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。

列存储数据库通常用来应对分布式存储的海量数据。具有代表性的列存储数据库有 Cassandra 和 HBase

XML 数据库(XML Database,XMLDB)

XML 数据库是一种支持对 XML(标准通用标记语言下的一个应用)格式文档进行存储和查询等操作的数据管理系统。在系统中,开发人员可以对数据库中的 XML 文档进行查询、导出和指定格式的序列化。

键值存储数据库(Key-Value Store,KVS)

键值存储数据库是用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组或者散列(hash)。

具有代表性的键值存储数据库有 Redis、Memcached 和 MemcachedDB。

常用数据库

Oracle

Oracle 是甲骨文公司的一款关系型数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。

优点:
  1. Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
  2. 获得最高认证级别的 ISO 标准认证,安全性高。
  3. 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
  4. 多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
  5. 完全向下兼容,因此被广泛应用,且风险低 。

向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。

缺点:
  1. 对硬件的要求高
  2. 价格比较昂贵
  3. 管理维护麻烦
  4. 操作比较复杂

SQL Server

SQL Server 是 Microsoft(微软)公司推出的关系型数据库管理系统,主要应用于大型的管理系统中。

优点:
  1. 与微软的 Windows 系列操作系统的兼容性很好。
  2. 高性能设计,可充分利用 WindowsNT 的优势。
  3. 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置。
  4. 强壮的事务处理功能,采用各种方法保证数据的完整性。
  5. 支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。
缺点:
  1. SQL Server 只能在 Windows 系统上运行,没有丝毫开放性。
  2. 没有获得任何安全证书。
  3. 多用户时性能不佳 。
  4. 只支持 C/S 模式,SQL Server C/S 结构只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接。

MySQL

MySQL 是一种开放源代码的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。因为其速度、可靠性和适应性而备受关注。MySQL 是流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的应用软件之一。

优点:
  1. 性能卓越服务稳定,很少出现异常宕机
  2. 开放源代码且无版权制约,自主性强、使用成本低。
  3. 历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
  4. 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
  5. 支持多种操作系统,提供多种 API 接口,支持多种开发语言。
缺点:
  1. MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
  2. MySQL 不允许调试存储过程,开发和维护存储过程很难。
  3. MySQL 不支持热备份。
  4. MySQL 的价格随平台和安装方式变化。

Access

Access 是由 Microsoft(微软)发布的小型关系数据库管理系统,是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。

优点:
  1. 存储方式简单,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户的操作和管理。
  2. Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。
  3. 界面友好、易操作。Access 是一个可视化工具,风格与 Windows 完全一样,用户想要生成对象应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。
  4. 集成环境,可以处理多种数据信息。Access 基于 Windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。
  5. 支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。
缺点:
  1. 不支持并发处理。
  2. 数据库存储量小安全性不够高。
  3. Access 是小型数据库,当数据量过大时,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。
  4. 虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在10-20个用户。
  5. 单表记录数过百万时,性能就会变得较差,如果加上设计不良,这个限度还要降低。
  6. 不能编译成可执行文件(.exe),必须要安装 Access 运行环境才能使用。

DB2

DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的关系型数据库管理系统。主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境。

优点:
  1. 相比较 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模地应用程序执行能力,具有与平台无关的基本功能和 SQL 命令。
  2. DB2 采用了数据分级技术,能够使大型数据很方便的下载到数据库服务器,使数据库本地化和远程连接透明化。
  3. 拥有非常完备的查询优化器,改善了查询性能,并支持多任务并行查询。
  4. 具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统更加使用。
  5. DB2 可跨平台使用。
缺点:
  1. 配置文件和参数多,且命名不规范。
  2. 一些 DB2 产品开发不方便。
  3. 和 Oracle 相比,命令多,且没 Oracle 统一规范的好。
  4. 由于其设计框架的问题,如果用户对数据库的本身优化和应用程序优化做的不足,那么 DB2 容易出现锁等待现象。

PostgreSQL

PostgreSQL 是一款富有特色的自由数据库管理系统,甚至可以说是最强大的自由软件数据库管理系统。该数据库管理系统支持了目前世界上最丰富的数据类型。是自由软件数据库管理系统中唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的自由软件。

优点:
  1. PostgreSQL 遵循的是 BSD 协议,是一个完全开源、免费、同时非常强大的关系型数据库。
  2. 与 PostgreSQL 配合的有很多分布式集群软件,如 pgpool、pgcluster、slony、plploxy 等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这些 MySQL 则比较难实现。
  3. PostgreSQL 源代码写的很清晰,易读性比 MySQL 强,所以很多公司基本都是以 PostgreSQL 做二次开发的。
  4. PostgreSQL 是多进程的,而 MySQL 是多线程的。并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL 的总体处理性能不如 PostgreSQL,原因是 MySQL 的线程无法充分利用 CPU 的能力。
  5. PostgreSQL 有很强大的查询优化器,支持很复杂的查询处理。

BSD 开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

缺点:
  1. 对于简单而繁重的读取操作,相比较其它数据库来说,PostgreSQL 性能较低。
  2. PostgreSQL 数据库扩容花费时间很长。

本文结束啦感谢您阅读