数据存储在存储设备中,在实际应用中,有多种存储设备,下面我们一一介绍。同时在保存数据时,有特定的组织方式,在下面我也做简单介绍。
一 存储设备介绍
1.1 高速缓存
Cache,计算机拥有1M或跟多的高速缓存。现在的计算机一般有一级缓存、二级缓存、三级缓存。也可称为L1、L2、L3。当处理器需要数据和指令时,数据和指令就从内存移到高速缓存中。处理器访问高速缓存的时间只需几纳秒。
1.2 主存设备
也就是我们平常说的内存。
此处插播一点,为什么32的系统最多只支持4G的内存?因为32位的系统配合32位的CPU,寻址空间为2^32次方,计算出来为4294967296字节。也就是4G,所以32为的系统只支持4G内存,如果是64为的系统配合64位的CPU,则寻址空间为2^64次方,得到18446744073709551616字节,此时,内存已经不会有支持上的限制。
发生在计算机上的任何一件事情,都是作用于驻留在内存中的信息上。将数据从内存转移到处理器或高速缓存的速度在10~10ns的范围内。
1.3 辅助存储器
即磁盘,硬盘。在磁盘和内存中传送一个字节的速度在10ms左右,一次可以传送多个字节。数据主要存储在辅助存储器中。
1.4 第三级存储器
用来保存大量的数据,读写速度要慢于磁盘,但是容量大于磁盘的容量甚至是多个磁盘的容量,每个字节的花费要小于磁盘的花费。
二 数据存储方式
数据被保留在磁盘中,不论是操作系统的数据,还是数据库的数据。磁盘被划分为磁盘块(或像操作系统称为页),每块的大小是4~64KB,数据库在块上保存数据,整个块被从一个称为缓冲区的连续内存区域内移进或移出。
一般情况下,一个磁盘块仅存放一个关系的元组,也就是一个磁盘块,保存表的一条数据。当然也可以在一个磁盘块上保存数个关系的元组,但一般情况下,并不如此。同时,如果一个磁盘块放不下一个关系的元组,则需要多个磁盘块来保存这一个关系的元组,如一个BLOB字段,肯定需要多个磁盘块来保存。
在Oracle中,数据块会按照如下的方式来组织存放数据:
在Oracle中,使用块存储数据时,有两个重要的概念需要注意,行迁移和行链接。
行迁移:当一个块中已存在的数据被UPDATE为很大的数据而导致这个块没有空间存放这条记录时,Oracle就会把这条数据迁移到一个能存放下的其他块中,同时在原先的块中保留这个新块的地址。
行链接:初始插入的数据太大了,而导致一个块不能存放整体数据,需要多个块来存放这条数据。
这两种情况都会导致数据查询速度变慢,具体的我会在SQL调优的主题里说明。
三 特定数据库对象的存储实现
此处以表为例,说明在Oracle中,表如何存放。
Oracle中的表细分的话,可以分为如下9类(参考Oracle11G):
堆组织表、索引组织表、索引聚簇表、散列聚簇表、有序散列聚簇表、嵌套表、临时表、对象表、表外部
之所以有这么多种类的表,都是为了数据的存储、查询或特殊处理而设计的,此处我通过堆组织表和索引组织表为例,说明数据具体存放的方式。
堆组织表:堆是计算机科学中一种重要的经典的数据结构,可以简单理解为一个很大的磁盘空间,以一种显示随机的方式来管理数据。堆表最显著的特点是:数据会存放在最合适的地方,而不是以某种特定顺序来放置。日常工作中,大部分表都是堆组织表。
当你插入一条数据时,数据库不会考虑将其放在某个你“想要”的位置(如我插入一条ID为1的记录和ID为2的记录在磁盘上“挨着”,连续存储),而是将其放在数据库认为最合适的位置,比如有一个块正好可以存放此条记录,则将其放在这个快上,而这个快可能和这个表的其他数据存放的块毫无关系(不在一个块上),“距离”也可能很远。只要有空间,数据会存放在任何位置。
优点:随机存储,这样可以很快的将数据写到磁盘上,相比你要将数据放到指定的位置,会少一个寻找磁盘的时间。
缺点:当扫描大范围的数据时,需要扫描很多磁盘块,再将这些快聚集到一块返回到内存中,此时会占用很多时间。
关于在使用堆表调优的方法,我会在博客的其他文章中进行介绍。
索引组织表:又称为IOT(index organized table),就是存储在一个索引组织中的表。此处呀区别堆表,堆表数据的存储是无序的,可以存放在磁盘的任何位置;IOT中数据则按照主键存储和排序。在IOT中,数据和索引存储在相同的位置。索引就是数据,数据就是索引。
当你插入数据时,这些数据的存储必然是按照主键来进行排序存储的,如ID分别为1和2的数据,在先后插入到表中时,存放的位置必然是在一个磁盘块或相邻的磁盘块中。
优点:读取数据时,只需读取索引就能得到数据
缺点:存储数据时,需要先对数据进行组织(对主键进行排序,确定记录存放在磁盘上的位置),才能将确定数据的存储位置,此时会浪费一定的时间。
特定的表可以设计为索引组织表,一般将一些很少修改但会大量读取的小表设计为索引组织表,如码表。
深得东西大家可以细细挖掘,了解了数据库的数据存储方式,才能对我们的调优,管理有所帮助。
注1:图片来源于网络
注2:本文的大部分内容来自书籍《数据库系统实现》来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24816552/viewspace-1313802/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24816552/viewspace-1313802/