本文共 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就可以完全载入。为了达到这个目的,在B+Tree每次新建一个节点的同时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。
介绍完毕数据库的产生以及如何存储数据,接下来我们要了解数据库如何跑的最快,性能最优,时间最少。请听下回分解
转载地址:http://sweof.baihongyu.com/