数据库存储介绍

数据存储在存储设备中,在实际应用中,有多种存储设备,下面我们一一介绍。同时在保存数据时,有特定的组织方式,在下面我也做简单介绍。

一 存储设备介绍

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/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值