博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要用数据库?
阅读量:2048 次
发布时间:2019-04-28

本文共 3391 字,大约阅读时间需要 11 分钟。

第一个问题:什么是数据库?

      数据,现在被誉为工业社会的“石油”。数据(data)是事实或观察的结果,是对的逻辑归纳,是用于表示客观事物的未经 加工的原始素材。数据可以是连续的值,比如声音、图像,称为。也可以是离散的,如符号、文字,称为。

在计算机系统中,数据以信息单元0,1的形式表示,被存储在磁盘或者内存当中。

    数据库是数据管理的产物。数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、储存、检索和维护。随着计算机硬件和软件的发展,数据库技术也不断地发展。从数据管理的角度看,数据库技术到目前共经历了人工管理阶段、文件系统阶段和数据库系统阶段。

第二个问题:为什么要使用数据库?

A.人工管理阶段

    人工管理阶段是指计算机诞生的初期(即20世纪50年代后期之前),这个时期的计算机主要用于科学计算。从硬件看,没有磁盘等直接存取的存储设备;从软件看,没有操作系统和管理数据的软件,数据处理方式是批处理。
    这个时期数据管理的特点是:
  1. 数据不保存
    该时期的计算机主要应用于科学计算,一般不需要将数据长期保存,只是在计算某一课题 时将数据输入,用完后不保存原始数据,也不保存计算结果。
  2. 没有对数据进行管理的软件系统
    程序员不仅要规定数据的逻辑结构,而且还要在程序中设计物理结构,包括存储结构、存取方法、输入输出方式等。因此程序中存取数据的子程序随着存储的改变而改变,数据与程序不具有一致性。
  3. 没有文件的概念
      数据的组织方式必须由程序员自行设计。
  4. 一组数据对应于一个程序,数据是面向应用的
    即使两个程序用到相同的数据,也必须各自定义、各自组织,数据无法共享、无法相互利用和互相参照,从而导致程序和程序之间有大量重复的数据。

B.文件系统阶段

     文件系统阶段是指计算机不仅用于科学计算,而且还大量用于管理数据的阶段(从50年代后期到60年代中期)。在硬件方面,外存储器有了磁盘、磁鼓等直接存取的存储设备。在软件方面,操作系统中已经有了专门用于管理数据的软件,称为文件系统。
    这个时期数据管理的特点是:
  1. 数据需要长期保存在外存上供反复使用
    由于计算机大量用于数据处理,经常对文件进行查询、修改、插入和删除等操作,所以数据需要长期保留,以便于反复操作。
  2. 程序之间有了一定的独立性
    操作系统提供了文件管理功能和访问文件的存取方法,程序和数据之间有了数据存取的接口,程序可以通过文件名和数据打交道,不必再寻找数据的物理存放位置,至此,数据有了物理结构和逻辑结构的区别,但此时程序和数据之间的独立性尚还不充分。
  3. 文件的形式已经多样化
    由于已经有了直接存取的存储设备,文件也就不再局限于顺序文件,还有了索引文件、链表文件等,因而,对文件的访问可以是顺序访问,也可以是直接访问。
     4. 数据的存取基本上以记录为单位

利用文件存储数据的操作起来会十分痛苦: 开发人员需要熟悉操作磁盘文件的方法、必须编写复杂的搜寻算法才能高效的把数据从文件中检索出来、当数据格式发生变化时,需要编写复杂的文件格式升级程序、很难控制并发修改。所以我们有了数据库,对数据统一进行管理,并且针对数据的类型划分成不同的种类。。

C.数据库系统阶段

    数据库系统阶段是从60年代后期开始的。在这一阶段中,数据库中的数据不再是面向某个应用或某个程序,而是面向整个企业(组织)或整个应用的。数据库系统阶段的特点是:
     1. 采用复杂的结构化的数据模型
     数据库系统不仅要描述数据本身,还要描述数据之间的联系。这种联系是通过存取路径来实现的。
     2. 较高的数据独立性
     数据和程序彼此独立,数据存储结构的变化尽量不影响用户程序的使用。
     3. 最低的冗余度
     数据库系统中的重复数据被减少到最低程度,这样,在有限的存储空间内可以存放更多的数据并减少存取时间。
     4. 数据控制功能
     数据库系统具有数据的安全性,以防止数据的丢失和被非法使用;具有数据的完整性,以保护数据的正确、有效和相容;具有数据的并发控制,避免并发程序之间的相互干扰;具有数据的恢复功能,在数据库被破坏或数据不可靠时,系统有能力把数据库恢复到最近某个时刻的正确状态。

数据库文件体系结构

现在我们以mysql为例子来看一下数据库文件体系结构:

如下图是MySQL(5.7.18)在Linux系统yum默认安装的数据文件目录,可以看到有如下几类文件。

数据库路径:可以看到,系统数据库和用户自定义的数据库都是一个路径,展开具体的路径之后是具体的每个数据库自己的对象。由此可见数据库系统是建立在文件系统基础之上的。通过文件路径与物理存储来映射,最终是映射到外部存储也就是磁盘上。

数据库磁盘存储:

数据库管理系统将数据存储在磁盘、磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选。

一次完整的输入输出(IO)操作的时间=磁盘轴旋转时间(旋转延迟)+磁盘臂移动时间(寻道时间)+数据传输时间。三者所需时间的平均经验值为:0.004秒、0.008秒和0.0005秒。所以,一次完整的IO时间的经验值是0.0125秒,即1/80秒

对于大型数据库而言,即便是这极短暂的0.0125秒,频繁的IO操作会将这微不足道的时间累积得非常可观,因此磁盘存储的优化对于数据库效率的提升是非常必要和重要的。我们都知道木桶原理,短板绝对整体的好坏,而数据库系统中这个短板正是由于我们 使用的硬件设备里最弱的磁盘所导致。很多时候,我们会发现系统中I/O累得要死,而CPU却在那里空闲等待,主要是由于I/O执行响应时间太长,处理读写的速度远远赶落后于CPU的处理速度,这时我们会尽可能的让操作放到内存中进行,由磁盘与CPU的关系,转变成内存与CPU的关系,会使用内存中的缓冲池来最小化磁盘活动。甚至有专门基于内存的内存数据库比如redis。不同的数据库产品的磁盘存储内部实现是不同的,在这里不对此进行展开。

mysql的默认数据库存储引擎是InnoDB,在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page):

在这里插入图片描述

同一个数据库实例的所有表空间都有相同的页大小;默认情况下,表空间中的页大小都为 16KB,当然也可以通过改变 innodb_page_size 选项对默认大小进行修改,需要注意的是不同的页大小最终也会导致区大小的不同:

磁盘的存储概念:

  • 扇区:每个同心环叫做一个扇区,扇区是磁盘的最小存储单元。当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点,磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间;然后磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。
  • 页:由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因此为了提高效率,要尽量减少磁盘I/O。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。预读可以提高I/O效率。预读的长度一般为页(page:计算机管理存储器的逻辑块-通常为4k)的整倍数. 主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中。

文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在B+Tree每次新建一个节点的同时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

介绍完毕数据库的产生以及如何存储数据,接下来我们要了解数据库如何跑的最快,性能最优,时间最少。请听下回分解

 

 

 

转载地址:http://sweof.baihongyu.com/

你可能感兴趣的文章
剑指offer 39.构建乘积数组
查看>>
剑指offer 57. 删除链表中重复的结点
查看>>
剑指offer 58. 链表中环的入口结点
查看>>
剑指offer 59. 把字符串转换成整数
查看>>
剑指offer 60. 不用加减乘除做加法
查看>>
剑指offer 61. 求1+2+3+...+n
查看>>
剑指offer 62. 孩子们的游戏
查看>>
剑指offer 63.扑克牌顺子
查看>>
剑指offer 64. 翻转单词顺序列
查看>>
剑指offer 65. 左旋转字符串
查看>>
剑指offer 66. 和为S的两个数字
查看>>
leetcode 热题 Hot 100-5. 二叉树的最大深度
查看>>
leetcode 热题 Hot 100-2. 有效的括号
查看>>
leetcode 热题 Hot 100-3. 合并两个有序链表
查看>>
leetcode 热题 Hot 100-4. 对称二叉树
查看>>
Leetcode C++《热题 Hot 100-12》226.翻转二叉树
查看>>
Leetcode C++《热题 Hot 100-13》234.回文链表
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>
Leetcode C++《热题 Hot 100-15》437.路径总和III
查看>>
Leetcode C++《热题 Hot 100-16》448.找到所有数组中消失的数字
查看>>